Si no desea que algunos procedimientos estén a disposición del público que no puede declarar en la especificación del paquete. Declararlos solo en el cuerpo del paquete. La causa del error al que se enfrenta es el orden de declaración de los procedimientos en el cuerpo del paquete o la falta de declaración directa. Por ejemplo:
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
Esto sucede porque estamos llamando Proc2
que declaró más tarde en el paquete. En este caso, nuestras opciones son:
Declarar pro2
antes de que el procedimiento que llama
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
Uso declaración adelantada.
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
Muchas gracias por señalar el error – user75ponic