У меня есть анонимный pl/sql блок с процедурой, объявленной в нем, а также курсором. Если я объявляю процедуру перед курсором, это перестало работать. Существует ли требование что курсоры быть объявленным до процедур?
Что другие правила там для порядка объявления в pl/sql блоке?
Это работает:
DECLARE
cursor cur is select 1 from dual;
procedure foo as begin null; end foo;
BEGIN
null;
END;
Это перестало работать с ошибкой PLS-00103: Encountered the symbol "CURSOR" when expecting one of the following: begin function package pragma procedure form
DECLARE
procedure foo as begin null; end foo;
cursor cur is select 1 from dual;
BEGIN
null;
END;
Курсоры, переменные, константы и типы должны быть объявлены перед пакетами/функциями.
Это тоже не получится:
DECLARE
procedure foo as begin null; end foo;
x VARCHAR2(10);
BEGIN
null;
END;
Если вы хотите объявить курсор, доступный и для подпроцедуры, просто добавьте еще один анонимный блок:
DECLARE
cursor cur is select 1 from dual;
BEGIN
DECLARE
procedure foo as begin null; end foo;
BEGIN
null;
END;
END;