Jeśli nie chcesz pewne procedury powinny być dostępne publicznie, że nie może zadeklarować je w opisie pakietu. Deklaruj je tylko w treści pakietu. Przyczyną błędu, z którym się spotkasz, jest kolejność deklaracji procedur w pakiecie lub brak zgłoszenia do przodu. Na przykład:
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
Dzieje się tak dlatego wzywamy Proc2
który deklarowaną później w opakowaniu. W tym przypadku nasze wybory są:
Declare pro2
przed zabiegiem, który wzywa go
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
Zastosowanie naprzód deklaracja.
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
Wielkie dzięki za wskazanie błędu – user75ponic