Se non si desidera alcune procedure siano disponibili al pubblico non si può dichiararli nella specifica pacchetto. Dichiarali solo nel corpo del pacchetto. La causa dell'errore che si sta affrontando è l'ordine di dichiarazione delle procedure nel corpo del pacchetto o la mancanza di dichiarazione anticipata. Per esempio:
create or replace package Test_pkg as
2 procedure Proc1;
3 end;
4/
Package created
create or replace package body Test_pkg as
2
3 procedure proc1 is
4 begin
5 proc2;
6 end;
7
8 procedure Proc2 is
9 begin
10 dbms_output.put_line('proc2 is being executed');
11 end;
12
13 end;
14/
Warning: Package body created with compilation errors
Error: PLS-00313: 'PROC2' not declared in this scope
Questo accade perché stiamo chiamando Proc2
che ha dichiarato in seguito nel pacchetto. In questo caso, le nostre scelte sono:
Declare pro2
prima che la procedura che lo chiama
create or replace package body Test_pkg as
2
3
4 procedure Proc2 is
5 begin
6 dbms_output.put_line('proc2 is being executed');
7 end;
8
9 procedure proc1 is
10 begin
11 proc2;
12 end;
13
14 end;
15/
Package body created
Usa dichiarazione anticipata.
create or replace package body Test_pkg as
2
3 procedure Proc2;
4
5 procedure proc1 is
6 begin
7 proc2;
8 end;
9
10 procedure Proc2 is
11 begin
12 dbms_output.put_line('proc2 is being executed');
13 end;
14
15
16 end;
17/
Package body created
SQL> exec test_pkg.Proc1;
proc2 is being executed
PL/SQL procedure successfully completed
fonte
2012-10-03 11:29:05
Grazie mille per aver segnalato l'errore – user75ponic