Nếu bạn không muốn một số thủ tục để được công bố rộng rãi bạn có thể không phải khai báo trong đặc tả gói. Khai báo chúng chỉ trong phần thân gói. Nguyên nhân của lỗi bạn đang gặp phải là thứ tự khai báo của các thủ tục trong phần thân gói hoặc thiếu khai báo chuyển tiếp. Ví dụ:
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
Điều này xảy ra vì chúng tôi đang gọi Proc2
được khai báo sau trong gói. Trong trường hợp này sự lựa chọn của chúng tôi là:
Declare pro2
trước khi các thủ tục mà gọi nó
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
Sử dụng phía trước tuyên bố.
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
Nguồn
2012-10-03 11:29:05
Cảm ơn rất nhiều vì đã chỉ ra lỗi – user75ponic