我定义了一常量包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;
是不是这个写法不正确。没有值啊

解决方案 »

  1.   


    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.
      

  2.   

    哪里有区别啊,我用plsql develop编辑不能进行test之间的调试,直接出去了。
    改为function,可以看到正确的返回值,但是在函数内部看不到正确的值。
      

  3.   


    create or replace package testconst isc_test1 constant number :=1;
    end testconst;--以下这个不需要定义的
    create or replace package  body testconst is
    end testconst;
      

  4.   

    原来是 PLSQL 调试时看不到。
    可以在定义包时用 PRAGMA SERIALLY_REUSABLE 选项,试试。
     create or replace package pck is
      pragma serially_reusable;
      n constant number:=1;
     end pck;
     /
      

  5.   

    没问题SQL> create or replace package testconst is
      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 过程已成功完成。
      

  6.   

    可以在plsql dev中调试,可以看到值