2011-08-24 40 views
1

在問題的`declare`部分條目的具體順序「Is Oracle's syntax diagram for PL/SQL blocks wrong?René Nyffenegger表明甲骨文如何可以使光標定義, preceed變量聲明在塊的 定義段儘管Oracle's documenation表示這是 不允許。並問他是否錯過了什麼。是否Oracle的PS/SQL需要在一個塊

Paxdiablo's answer與文檔 劉若英的閱讀同意,遊標定義不能來之前的變量聲明,因爲變量聲明 只允許在item_list_1,光標 定義只允許在item_list_2和item_list_1 item_list_2之前談到 。

René評論說:「我不知道item_1 元素和item_2元素之間是否有區別?」換句話說,「在塊的聲明 部分的不同類型的條目之間是否有任何 排序?」

回答

3

隨着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

認爲(基於非常有限empric測試)第一procedure definitionfunction definItion什麼,但經過進一步procedure definitions或允許使用function definitions

所以,variable declarations(或更一般的item declarations),cursor declarationstype definitions等應item 1 elems和(可能只)function definitionsprocedure definitionsitem 2 elems(只有item 2 elems)。

(僅?)function declarationsprocedure declarations是(或似乎)獲准在item 1 elemsitem 2 elems兩者。

+0

這是11gR2嗎?我沒有11gR2的方便,它確實顯示你描述的是10gR2的行爲,匹配我答案中的錯誤信息。這也是10gR2文檔中描述的行爲:http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/block_declaration.htm#sthref2482 –

+0

是的,那是在10gR2上。直到週一我將無法觸及11gR2。 –