Требует ли Oracle PS / SQL особого упорядочения записей в разделе «объявлять» блока? - PullRequest
1 голос
/ 24 августа 2011

В вопросе " Не верна ли синтаксическая диаграмма Oracle для блоков PL / SQL? " Рене Ниффенеггер показал, как Oracle позволяет определениям курсора предшествующие объявления переменных в разделе объявления блока в несмотря на документацию Oracle указали, что это было не положено. И спросил, не упустил ли он что-нибудь.

ответ Паксдиабло согласен с прочтением Рене документации что определение курсора не может предшествовать объявлению переменной, поскольку объявления переменных разрешены только в item_list_1, курсор определения разрешены только в item_list_2 и item_list_1 перед item_list_2.

Рене прокомментировал: «Интересно, есть ли разница между item_1? elements и item_2 elements вообще? "По-моему" Есть ли требуется упорядочение между различными типами записей в объявлении сечение блока? "

Ответы [ 2 ]

3 голосов
/ 24 августа 2011

Начиная с Oracle 10g R2, ответ - да, обязательный порядок между элементами в item_list_1 и item_list_2, даже если курсор определения допускаются не к месту.

Например, определение процедуры недопустимо до объявления переменной:

SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
PL/SQL Release 10.2.0.4.0 - Production
CORE    10.2.0.4.0  Production
TNS for Solaris: Version 10.2.0.4.0 - Production
NLSRTL Version 10.2.0.4.0 - Production

SQL> declare
  2      variable_declaration number;
  3      procedure procedure_definition is begin
  4          null;
  5      end procedure_definition;
  6  begin
  7      null;
  8  end;
  9  /

PL/SQL procedure successfully completed.

SQL> declare
  2      procedure procedure_definition is begin
  3          null;
  4      end procedure_definition;
  5      variable_declaration number;
  6  begin
  7      null;
  8  end;
  9  /
    variable_declaration number;
    *
ERROR at line 5:
ORA-06550: line 5, column 5:
PLS-00103: Encountered the symbol "VARIABLE_DECLARATION" when expecting one of the following:
begin function package pragma procedure form
ORA-06550: line 8, column 4:
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:
end not pragma final instantiable order overriding static
member constructor map
1 голос
/ 25 августа 2011

I думаю (на основании очень ограниченного empric теста), что после первых procedure definition или function definItion ничего, кроме дальнейшего procedure definitions или function definitions, не допускается.

Итак, variable declarations (или, в более общем случае, item declarations), cursor declarations, type definitions и т. Д. Должны быть item 1 elems и (вероятно, только) function definitions и procedure definitions должны быть item 2 elems (и только item 2 elems).

(только?) function declarations и procedure declarations разрешены (или, по-видимому, разрешены) как в item 1 elems, так и item 2 elems.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...