pl/sql怎么返回数据集?
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;
/
create or replace package pkg_test
as
  type myCursor is ref cursor;
  function get(p_id number) return myCursor;
end pkg_test;create or replace package body pkg_test 
as
  --输入ID 返回记录集的函数
  function get(p_id number) return myCursor is
     rc myCursor;
     strsql varchar2(200);
  begin
     if p_id=0 then 
        open rc for select a.user_name from fnd_user a ;  
     else
        strsql:='select a.user_name from fnd_user a where a.user_id=:p_id';
        open rc for strsql using p_id;
     end if;
     return rc;  
     end get;
end pkg_test;
--上面是一个返回结果集的函数,下面调用.
create or replace procedure pro_test as
    v_out pkg_test%myCursor;
    v_name varchar2(100);
begin
    v_out:=pkg_test.get(0);  --得到结果集
    loop
        fetch v_out into v_name;
        exit when v_out%notfound;
        --这里进行处理,想要处理哪一行或进行什么处理在这里进行
    end loop;
......
end;

解决方案 »

  1.   

    这其实是一个游标,不能在sql中直接调用 的!在过程中来使用,和普通的游标是一样的使用方法!
      

  2.   

    begin
      pk_sc2.fs2('select * from TParameterMedicare');
    End;
    /
    试试
      

  3.   

    begin
      pk_sc2.fs2('select * from TParameterMedicare');
    End;我怎么才能得到返回值呢?
      

  4.   

    在fs2中打开游标,不能直接调用的
         open c_cursor for sqlStr
         loop
              fetch c_cursor into ...
                ........
        exit when ....
         end loop
      

  5.   

    存储过程返回数据集
    create package test_age
    as
    type myrc is ref cursor;
    end;
    /
    create or replace PROCEDURE Display(p_rc out test_age.myrc)
    is
    begin
    open p_rc for 'select * from pwm';
    end Display;
    /
      

  6.   

    create or replace package pk_sc2 as
       type c_Type is ref cursor;
       procedure fs2(sqlStr varchar2,rs out c_Type);
    end pk_sc2;create or replace package body pk_sc2 as
      procedure fs2(sqlStr varchar2,rs out c_Type) is
      begin
         open rs for sqlStr;
      end fs2;
    end pk_sc2;