CREATE OR REPLACE PACKAGE pkg_aa 
AS 
    TYPE myrctype IS REF CURSOR; 
  
    PROCEDURE get(p_id NUMBER, p_rc OUT myrctype); 
END pkg_dept; 
我怎么样在sql*plus中调用这个存储过程呢?主要是不知道写那个定义Ref Cursor。能否写个调用的例子。
另外在pl/sql块中如何调用它?

解决方案 »

  1.   

    Connected to Oracle9i Enterprise Edition Release 9.2.0.1.0 
    Connected as kdcerp20
    SQL> 
    SQL> CREATE OR REPLACE PACKAGE pkg_aa
      2  AS
      3      TYPE myrctype IS REF CURSOR;
      4      PROCEDURE get(p_id NUMBER, p_rc OUT myrctype);
      5  
      6  END pkg_aa;
      7  /Package createdSQL> 
    SQL> CREATE OR REPLACE PACKAGE BODY "PKG_AA" AS
      2  
      3  PROCEDURE get(p_id NUMBER, p_rc OUT myrctype)
      4  IS
      5   v_num  NUMBER;
      6  BEGIN
      7  
      8  SELECT  p_id INTO v_num FROM dual;
      9  
     10  OPEN p_rc FOR SELECT * FROM basiccode;
     11  
     12  END get;
     13  
     14  
     15  
     16  END pkg_aa;
     17  /Package body createdSQL> 
    SQL> declare
      2   TYPE myrctype IS REF CURSOR;
      3  mycur myrctype;
      4  v_num NUMBER;
      5  begin
      6   pkg_aa.get(v_num,mycur);
      7  end;
      8  /PL/SQL procedure successfully completed
      

  2.   

    在sqlplus中直接调用,还可以这样做
    var c refcursor
    exec pkg_aa.get(1,:c)
    print c