Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 使用游标的PL/SQL更新_Oracle_Plsql - Fatal编程技术网

Oracle 使用游标的PL/SQL更新

Oracle 使用游标的PL/SQL更新,oracle,plsql,Oracle,Plsql,我创建了一个匿名块,该块将删除电子邮件列中@之前的所有内容 DECLARE v_id NUMBER(10); v_email VARCHAR2(30); i NUMBER(1) := 0; CURSOR cursor_name IS SELECT Id, (substr (email, instr (email,'@',1) + 1 )) AS Domain FROM invoices WHERE id=31232681; BEGIN

我创建了一个匿名块,该块将删除电子邮件列中@之前的所有内容

DECLARE
   v_id NUMBER(10);
   v_email VARCHAR2(30);
   i NUMBER(1) := 0;
   CURSOR cursor_name IS 
      SELECT Id, (substr (email, instr (email,'@',1) + 1 )) AS Domain
      FROM invoices
      WHERE id=31232681;
BEGIN
   OPEN cursor_name;
   LOOP
      v_email := '@' || v_email;
      FETCH cursor_name INTO v_id, v_email;
         UPDATE invoices
         SET email = v_email
         WHERE Id =  v_id;
      EXIT WHEN cursor_name%NOTFOUND
   END LOOP;
   CLOSE cursor_name;
END;
但获取PLS-00103错误:

PLS-00103: Encountered the symbol "(" when expecting one of the following:
     := . ) , @ % default character 
The symbol ":=" was substituted for "(" to continue
你能帮我知道是什么问题吗

解决方案 分号在以下位置丢失:

未找到光标名称%1时退出

你能试试吗

DECLARE    
 v_id NUMBER(10);
 v_email VARCHAR2(30);
 i NUMBER(1) := 0;

 CURSOR cursor_name IS 
  SELECT Id, (substr (email, instr (email,'@',1) + 1 )) AS Domain
  FROM invoices
  WHERE id=31232681;

BEGIN
 OPEN cursor_name;
 LOOP
  v_email := '@' || v_email;
  FETCH cursor_name INTO v_id, v_email;
   UPDATE invoices
   SET email = v_email
   WHERE Id =  v_id;
   EXIT WHEN cursor_name%NOTFOUND;
 END LOOP;
 CLOSE cursor_name;
END;

我现在看到了您的解决方案,很抱歉:)

您不需要游标或PL/SQL。为什么不直接使用
updateinvoicessetemail=substr(..),其中id=31232681当前发布的代码在“
退出时…”行末尾缺少分号。但是,是的,正如@a_horse所说的-PL/SQL的目的是什么,当
update
本身这样做时?他正在连接值,他可能有多行相同的Id,并且想要连接电子邮件感谢您的回答!然而,如果你解释你在做什么以及为什么它能解决用户的问题,你的答案将对其他人更有帮助(并且更有可能获得更多的选票)