创建Oracle过程

我正在尝试创建一个程序,它创建没有错误。但是当我尝试运行它时,我会得到以下错误。请指教
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
程序是
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.
    
已邀请:
你不能明确地打开游标并在隐式FOR循环中使用它。您可以选择隐式(FOR循环)或显式(OPEN / FETCH / CLOSE)。     
如果使用带有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  /
    
6512错误消息指示错误导致的PL-SQL代码中的行号。 你确定之前没有其他消息吗?     
我不知道为什么你得到一个ORA-06512消息,上面没有其他错误消息。您确定已粘贴整个错误消息吗? ORA-06512仅在PL / SQL代码中引发异常时打印出堆栈跟踪时使用。这是一个完整的例子: 第1行的错误: ORA-01001:无效的光标 ORA-06512:在“USER.SOME_PROCEDURE”第5行 ORA-06512:第1行 这里真正的错误是ORA-01001。 ORA-06512仅表示发生错误的位置:在
USER.SOME_PROCEDURE
的第5行,由匿名PL / SQL块的第1行调用。 看一下你的代码,我发现了一些问题: 使用
FOR ... IN some_cursor LOOP ...
时,不应显式打开和关闭光标。这将由
FOR
循环自动完成。 您也不应尝试关闭尚未打开的游标。如果您尝试这样做,您将收到ORA-01001'无效游标'错误消息。我猜你已经把它放进来确保光标在你打开之前关闭了,但不幸的是你不能这样做。 简而言之,您应该删除程序中的所有
OPEN
CLOSE
语句,然后重试。     

要回复问题请先登录注册