Имейте в виду, что независимо от сценария причина всегда одинакова в .NET:
Вы пытаетесь использовать ссылочную переменную, значение которой
Nothing
/null
. Если для ссылочной переменной значениеNothing
/null
, это означает, что на самом деле оно не содержит ссылку на экземпляр любого объекта, который существует в куче.Вы либо никогда не присваивали какую-либо переменную, никогда не создавали экземпляр значения, присвоенного переменной, или вы вручную устанавливали переменную, равную
blockquote>Nothing
/null
, или вы вызывали функцию, которая установите для этой переменной значениеNothing
/null
.
Вы не можете явно открыть курсор, а также использовать его в неявном цикле 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 /
Я не знаю, почему вы получаете сообщение 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-06512s просто указывают, где произошла ошибка: в строке 5 из USER.SOME_PROCEDURE
, которая была вызвана по строке 1 анонимного блока PL / SQL.
Взглянув на ваш код, я могу заметить пара проблем:
FOR ... IN some_cursor LOOP ...
вы не должны явно открывать и закрывать курсор. Это будет сделано для вас автоматически с помощью цикла FOR
. Короче говоря, вы должны удалить все OPEN
и CLOSE
из вашей процедуры и повторите попытку.
6512 Сообщение об ошибке указывает номер строки в коде PL-SQL, в результате которой была получена ошибка. Вы уверены, что у вас нет другого сообщения раньше?