CREATE Oracle Процедура - PullRequest
       14

CREATE Oracle Процедура

3 голосов
/ 30 декабря 2010

Я пытаюсь создать процедуру, и она создается без ошибок.Однако, когда я пытаюсь запустить его, я получаю следующую ошибку.Пожалуйста, сообщите

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.

Ответы [ 4 ]

11 голосов
/ 30 декабря 2010

Вы не можете раскрыть курсор, а также использовать его в неявном цикле FOR. Вы часто выбираете либо неявное (цикл FOR), либо явное (OPEN / FETCH / CLOSE).

7 голосов
/ 30 декабря 2010

Если вы используете курсор с 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  /
0 голосов
/ 31 декабря 2010

Я не знаю, почему вы получаете сообщение ORA-06512 без других сообщений об ошибках над ним.Вы уверены, что вставили все сообщение об ошибке?

ORA-06512 используется только при распечатке трассировки стека, когда в коде PL / SQL возникает исключение.Вот полный пример:

ERROR at line 1:
ORA-01001: invalid cursor
ORA-06512: at "USER.SOME_PROCEDURE", line 5
ORA-06512: at line 1

Настоящая ошибка здесь - ORA-01001.ORA-06512 просто указывает, где произошла ошибка: в строке 5 USER.SOME_PROCEDURE, которая была вызвана строкой 1 анонимного блока PL / SQL.

Взглянув на ваш код, я могу определитьпара проблем:

  • При использовании FOR ... IN some_cursor LOOP ... не следует явно открывать и закрывать курсор.Это будет сделано для вас автоматически с помощью цикла FOR.

  • Также не следует пытаться закрыть курсор, который не был открыт.Если вы попытаетесь это сделать, вы получите сообщение об ошибке «Недопустимый курсор» ORA-01001.Я предполагаю, что вы вставили это, чтобы убедиться, что курсор был закрыт до того, как вы его открыли, но, к сожалению, вы не можете этого сделать.операторов OPEN и CLOSE из вашей процедуры и повторите попытку.

0 голосов
/ 31 декабря 2010

6512 Сообщение об ошибке указывает номер строки в коде PL-SQL, в результате которого возникла ошибка.Вы уверены, что у вас нет другого сообщения раньше?

...