一个例子,供参考:create or replace package pkg_test 
as
  type cur_test is ref cursor; -- 定義一個cursor的type
  /*
   *返回结果集
   */
  function getResult(input1 in number,input2 in varchar2) 
     return cur_test;
end pkg_test;
/
create or replace package body pkg_test is
  /*
   *返回结果集
   */
  function getResult(input1 in number,input2 in varchar2) 
     return cur_test
  is
     cur_return cur_test;
  begin
     open cur_return for 
          SELECT *
            FROM TEST 
           WHERE AA=INPUT1 
             AND BB LIKE '%'||INPUT2||'%';
     return cur_return;
  exception
     when others then
        if cur_return%isopen
        then
           close cur_return;
        end if;
           
  end getResult;end pkg_test;

解决方案 »

  1.   

    create or replace procedure sp_gdrecv
    (
      vchno char
    )as
    aaaaa  char
    bbbbb  char
    begin
      select 字段1,字段2 into aaaa,bbbb from gdrecv where vchno=vchno;
    end
      

  2.   

    kerisyml大哥,好像不是这样吧,我要返回的可是数据集呀,你的好像返回两个变量呀
      

  3.   

    CREATE OR REPLACE PACKAGE pkg_test
    AS
       TYPE myrctype IS REF CURSOR;   PROCEDURE get (p_id NUMBER, p_rc OUT myrctype);
    END pkg_test;
    /CREATE OR REPLACE PACKAGE BODY pkg_test
    AS
       PROCEDURE get (p_id NUMBER, p_rc OUT myrctype)
       IS
          sqlstr   VARCHAR2 (500);
       BEGIN
          IF p_id = 0 THEN
             OPEN p_rc FOR
                SELECT ID, NAME, sex, address, postcode, birthday
                  FROM student;
          ELSE
             sqlstr :=
                'select id,name,sex,address,postcode,birthday
               from student where id=:w_id';
             OPEN p_rc FOR sqlstr USING p_id;
          END IF;
       END get;
    END pkg_test;
    /
      

  4.   

    上面的老兄,这段代码我已经见到几次了,就是不明白那个w_id是怎样出来的。各位老兄,可不可以就我的那段代码来转换,别举其它例子了。
      

  5.   

    w_id是一个占位符,是用变量代替它的,若是还不是,可以转换这种写法吧
    sqlstr :='select id,name,sex,address,postcode,birthday
               from student where id='||p_id;
    OPEN p_rc FOR sqlstr;