Jåc*_*cob 10 oracle plsql scope stored-procedures package
我有一个名为save_db_values的包
我有两个名为store_records的过程,另一个名为db_activities. db_activities将通过传递db_activities中的所有值从我的应用程序调用我将调用store_records过程来执行insert和delete.
我是否需要在包规范中定义store_records过程?当我没有在规范中定义store_records时,我收到错误store_records not declared in this scope.
store_records程序我不想暴露,因此我没有添加规范.我该如何解决这个问题?
Nic*_*nov 31
如果您不希望某些过程公开,您可以不在包规范中声明它们.仅在包体中声明它们.您遇到的错误的原因是包体中的过程的声明顺序或缺少前向声明.例如:
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
Run Code Online (Sandbox Code Playgroud)
发生这种情况是因为我们正在调用Proc2稍后在包中声明的内容.在这种情况下,我们的选择是:
pro2在调用它的过程之前声明
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
Run Code Online (Sandbox Code Playgroud)
使用前向声明.
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34700 次 |
| 最近记录: |