Порядок объявления в анонимном блоке pl / sql - PullRequest
5 голосов
/ 09 июня 2010

У меня есть анонимный блок 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;

Ответы [ 2 ]

13 голосов
/ 09 июня 2010

Курсоры, переменные, константы и типы должны быть объявлены перед пакетами / функциями.

Этот тоже не удастся:

DECLARE
 procedure foo as begin null; end foo;
 x VARCHAR2(10);
BEGIN
 null;
END;
0 голосов
/ 10 июня 2010

Если вы хотите объявить курсор, который также доступен для подпроцедуры, просто добавьте еще один анонимный блок:

DECLARE
 cursor cur is select 1 from dual;
BEGIN
 DECLARE
  procedure foo as begin null; end foo;
 BEGIN
  null;
 END;
END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...