declare
v_ModelID ...;
v_depname ...;
v_ModelName ...;
v_opername ...;
p_rc1 get_modal_2_pkg.myrctype;
begin
get_modal_2_pkg.get_modal_2(p_rc1);
loop
fetch prc1 into v_ModelID,v_depname,v_ModelName,v_opername; 
exit when p_rc1%notfound;
dbms_output.put_line(v_ModelID||v_depname||v_ModelName||v_opername);
end loop;
end;
/

解决方案 »

  1.   

    declare
     opername varchar2(10);
     operid number(6,1);
     p_rc1 get_modal_2_pkg.myrctype;
    begin
    get_modal_2_pkg.get_modal_2(p_rc1);
    loop
    fetch prc1 into opername,operid; 
    exit when p_rc1%notfound;
    dbms_output.put_line(opername||operid);
    end loop;
    end;
    按照你写的那样做了,但是还是不行
    另外我们以前用sql server 2000 现在想用oracle 我们的存储过程几乎都是返回记录集然后再客户端html网页中处理,我们用sql server 2000 时是很方便的,但到oracle后会不会太复杂了
    错误:
    ORA-06550: 第 4 行, 第 8 列:
    PLS-00201: 必须说明标识符 'GET_MODAL_2_PKG.MYRCTYPE'
    ORA-06550: 第 4 行, 第 8 列:
    PL/SQL: Item ignored
    ORA-06550: 第 6 行, 第 29 列:
    PLS-00320: 此表达式的类型说明不完整或格式不正确
    ORA-06550: 第 6 行, 第 1 列:
    PL/SQL: Statement ignored
    ORA-06550: 第 8 行, 第 7 列:
    PLS-00201: 必须说明标识符 'PRC1'
    ORA-06550: 第 8 行, 第 1 列:
    PL/SQL: SQL Statement ignored
    ORA-06550: 第 9 行, 第 11 列:
    PLS-00320: 此表达式的类型说明不完整或格式不正确
    ORA-06550: 第 9 行, 第 1 列:
    PL/SQL: Statement ignore
      

  2.   

    CREATE OR REPLACE  PACKAGE GET_MODAL_2_PKG as
      TYPE myrctype IS REF CURSOR;
    end GET_MODAL_2_PKG;
    /
    CREATE OR REPLACE  PROCEDURE get_modal_2(p_rc OUT GET_MODAL_2_PKG.myrctype)
       is
       BEGIN
          
             OPEN p_rc FOR
                --select ModelID,depname,ModelName,opername,'' from InHosCureNameModel a,dep_table b,opertable c
                --where a.depid=b.depid and a.operid=c.operid ;
                'select * from clinic.operaccount';
              
         
    END get_modal_2;
    /declare
     opername varchar2(10);
     operid number(6,1);
     p_rc1 get_modal_2_pkg.myrctype;
    begin
    get_modal_2(p_rc1);
    loop
    fetch p_rc1 into opername,operid; 
    exit when p_rc1%notfound;
    dbms_output.put_line(opername||operid);
    end loop;
    end;
    /