我定义了一常量包create or replace package testconst isc_test1 constant number :=1;
end testconst;create or replace package body testconst is
end testconst;在另一个包中调用
create or replace package useconst isprocedure test(num0 number);
end useconst;
create or replace package body useconst isv_number1 number;procedure test(num0 number) is
begin
v_number1 := testconst.c_test1;
end test ;
end useconst;v_number1 := testconst.c_test1;
是不是这个写法不正确。没有值啊
SQL> create or replace package pck is
2 n constant number:=1;
3* end pck;
SQL> /SQL> create or replace package pck1 is
2 procedure display;
3 end pck1;
4 /Package created.SQL> create or replace package body pck1 is
2 procedure display is
3 n number;
4 begin
5 n:=pck.n;
6 dbms_output.put_line(n);
7 end;
8 end pck1;
9 /Package body created.SQL> begin
2 pck1.display;
3 end;
4 /
1PL/SQL procedure successfully completed.
改为function,可以看到正确的返回值,但是在函数内部看不到正确的值。
create or replace package testconst isc_test1 constant number :=1;
end testconst;--以下这个不需要定义的
create or replace package body testconst is
end testconst;
可以在定义包时用 PRAGMA SERIALLY_REUSABLE 选项,试试。
create or replace package pck is
pragma serially_reusable;
n constant number:=1;
end pck;
/
2
3 c_test1 constant number :=1;
4 end testconst;
5
6 /程序包已创建。SQL> create or replace package body testconst is
2 end testconst;
3
4 /程序包体已创建。SQL> create or replace package useconst is
2
3 procedure test(num0 number);
4 end useconst;
5 /程序包已创建。SQL> create or replace package body useconst is
2 v_number1 number;
3 procedure test(num0 number) is
4 begin
5 v_number1 := testconst.c_test1;
6 dbms_output.put_line(v_number1);
7 end test ;
8 end useconst;
9 /程序包体已创建。SQL> set serveroutput on
SQL> exec useconst.test(testconst.c_test1)
1PL/SQL 过程已成功完成。