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.   

    create or replace package PKG_ydconnection
    as
    type mycursor is ref cursor; 
    procedure Pro_CurShipPlan
        (
          O_result   out mycursor     
        )
        is  
        begin
          open O_result for select * from v_ydcurberthplan;    
        end;
    end PKG_ydconnection;   
    --我的带有返回结果集的存储过程
    create or replace procedure PRO_SHIPBERTH() is
      v_out scheduler.pkg_ydconnection.mycursor;--这里该是.吧
      v_name varchar2(1000);
    begin  v_out:=scheduler.pkg_ydconnection.Pro_CurShipPlan();
      --显示错误为:调用Pro_CurShipPlan参数个数或类型错误
      
      loop
            fetch v_out into v_name;
            exit when v_out%notfound;
            --这里进行处理,想要处理哪一行或进行什么处理在这里进行
        end loop;
    ...
    谢谢 dinya2003(OK) 
    请继续指教
      

  2.   

    create or replace package PKG_ydconnection
    as
    type mycursor is ref cursor; 
    procedure Pro_CurShipPlan
        (
          O_result   out mycursor     
        )
        is  
        begin
          open O_result for select * from v_ydcurberthplan;    
        end;
    end PKG_ydconnection;   
    --我的带有返回结果集的存储过程
    create or replace procedure PRO_SHIPBERTH() is
      v_out scheduler.pkg_ydconnection.mycursor;--这里该是.吧
      v_name varchar2(1000);
    begin  scheduler.pkg_ydconnection.Pro_CurShipPlan(v_out);ok
      
      loop
            fetch v_out into v_name;
            exit when v_out%notfound;
            --这里进行处理,想要处理哪一行或进行什么处理在这里进行
        end loop;
    ...
      

  3.   

    现在问题是
    fetch v_out into v_name;
    v_name类型问题v_name该是rowtype但v_name该怎么定义
    v_name v_out%rowtype 是不行的
      

  4.   

    v_ydcurberthplan%rowtype因为open O_result for select * from v_ydcurberthplan; 
      

  5.   

    共同学习!v_name v_ydcurberthplan%rowtype
      

  6.   

    v_ydcurberthplan是scheduler的 
    我是没有访问权限的只给了访问PKG_ydconnectionv_ydcurberthplan%rowtype就不行了谢谢 dinya2003(OK)  wylwyl1130(落雪山林) 
      

  7.   

    让DBA授权你可以访问scheduler的表.
      

  8.   

    让DBA授权你可以访问scheduler的表.
    ----------就是避免 “授权scheduler的表”
    才想到用存储过程实现的