创建Oracle过程

moh*_*mad 3 oracle plsql stored-procedures ora-06512

我正在尝试创建一个程序,它创建没有错误.但是当我尝试运行它时,我会得到以下错误.请指教

SQL> begin
  2   Update_STUD_Fin ( '1011');
  3  end;
  4  /
begin
*
ERROR at line 1:
ORA-06511: PL/SQL: cursor already open
ORA-06512: at "ORAIN.UPDATE_STUD_FIN", line 3
ORA-06512: at "ORAIN.UPDATE_STUD_FIN", line 8
ORA-06512: at line 2
Run Code Online (Sandbox Code Playgroud)

程序是

SQL> CREATE OR REPLACE PROCEDURE Update_STUD_Fin ( AIDY_CODE IN VARCHAR2 ) IS
  2    CURSOR PublicationC IS
  3      SELECT SGidm from SGB
  4       WHERE SGCODE_EFF ='201030';
  5  BEGIN
  6    OPEN PublicationC;
  7  
  8    FOR PublicationR IN PublicationC
  9    LOOP
 10      DBMS_OUTPUT.PUT_LINE( PublicationR.SGidm );
 11    END LOOP;
 12  
 13    close PublicationC;
 14   
 15  END;
 16  /

Procedure created.
Run Code Online (Sandbox Code Playgroud)

Ada*_*kes 11

你不能明确地打开游标并在隐式FOR循环中使用它.您可以选择隐式(FOR循环)或显式(OPEN/FETCH/CLOSE).


Cod*_*odo 7

如果使用带有FOR/IN/LOOP的游标,则无需明确打开它.写吧:

SQL> CREATE OR REPLACE PROCEDURE Update_STUD_Fin ( AIDY_CODE IN VARCHAR2 ) IS
  2    CURSOR PublicationC IS
  3      SELECT SGidm from SGB
  4       WHERE SGCODE_EFF ='201030';
  5  BEGIN
  8    FOR PublicationR IN PublicationC
  9    LOOP
 10      DBMS_OUTPUT.PUT_LINE( PublicationR.SGidm );
 11    END LOOP;
 12  
 15  END;
 16  /
Run Code Online (Sandbox Code Playgroud)