create or replace package s_package as
function m_add(int x,int y) return int;
end s_packagecreate or replace package body s_package as
function m_add(int x,int y) return int is 
   r int;
   begin
     r := x+y;
     return r;
     end m_add;
end s_packagedeclare
temp int;
begin
  temp := s_package.m_add(2,3);
  dbms_output.put_line(temp);
end;
  
这里怎么提示s_package无法引用m_add方法呢,我看pl/sql的使用手册,说不不加包名也可以使用其方法的。这里怎么不能用呢?

解决方案 »

  1.   

    create or replace package s_package as 
       function m_add(x in number,y in number) return number; 
    end s_package;

    create or replace package body s_package as
       function m_add(x in number,y in number) return number
       is
          r number := 0;
       begin
          r := x + y;
          return r;
       end m_add;
    end s_package;
    /declare 
    temp number; 
    begin 
      temp := s_package.m_add(2,3); 
      dbms_output.put_line(temp); 
    end; 
    /
      

  2.   

    你写的代码在sql plus内可以运行,但是在pl/sql中不可以运行,还是提示sys.s_package对象引用无效。什么原因呢?
      

  3.   

    包体和包规范中的int x,int y都写反了,改下顺序x int,y int即可,in可写可不写
    没有其他错误
    改正后重新编译,将包规范和包体分开编译
    再看看
      

  4.   

    谢谢哈,解决了。没有发现,刚开始学oracle,以后多多指教。
      

  5.   

    要编译的,我自己试了一下,在sql窗口需要分开编译才能成功