2010-06-09 9 views
5

Ich habe einen anonymen pl/sql Block mit einer Prozedur, die darin erklärt wird, sowie einen Cursor. Wenn ich die Prozedur vor dem Cursor deklariere, schlägt sie fehl. Gibt es eine Anforderung, dass Cursor vor Prozeduren deklariert werden?Reihenfolge der Deklaration in einem anonymen pl/sql Block

Welche anderen Regeln gibt es für die Reihenfolge der Deklaration in einem PL/SQL-Block?

Dies funktioniert:

DECLARE 
cursor cur is select 1 from dual; 
procedure foo as begin null; end foo; 
BEGIN 
null; 
END; 

Dies wird mit Fehler 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; 

Antwort

12

Cursors, Variablen, Konstanten und Typen müssen vor packages/Funktionen deklariert werden.

Dieses würde scheitern:

DECLARE 
procedure foo as begin null; end foo; 
x VARCHAR2(10); 
BEGIN 
null; 
END; 
+2

Die Dokumentation Referenz hier http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/block.htm#i32791 Es ist nicht sehr klar, aber "Element Deklarationen" (zB Variablen) sind in der Liste 1 und muss vor "procedure/function definitions" wh kommen Ich bin in Liste 2. –

+0

@Gary: Ausgezeichnet, danke! –

0

Wenn Sie einen Cursor deklarieren möchten, die auch auf die Sub-Prozedur vorhanden ist, fügen Sie einfach einen weiteren anonymen Block:

DECLARE 
cursor cur is select 1 from dual; 
BEGIN 
DECLARE 
    procedure foo as begin null; end foo; 
BEGIN 
    null; 
END; 
END; 
Verwandte Themen