游标怎么打印啊
例如:
declare
tt sys_refcursor;
begin
test000('110001','北京',tt);
dbms_output.put_line(tt);
end;但是这样报错啊
ORA-06550: line 5, column 1:
PLS-00306: wrong number or types of arguments in call to 'PUT_LINE'
ORA-06550: line 5, column 1:

解决方案 »

  1.   

    --给你个EMP数据库例子,你自己看看
    -- 存储过程返回记录集
    CREATE OR REPLACE PROCEDURE P_RETR_CURSOR
    (P_ID IN NUMBER,
    P_RECSET OUT SYS_REFCURSOR) AS
    BEGIN
    OPEN P_RECSET FOR
    SELECT e.empno,e.ename
    FROM emp e
    WHERE empno = P_ID;
    END;DECLARE
    I NUMBER;
    S VARCHAR2(100);
    M SYS_REFCURSOR;
    BEGIN
    FOR J IN 7900..7902 LOOP
    P_RETR_CURSOR(J, M);
    FETCH M
    INTO I, S;
    DBMS_OUTPUT.PUT(I || '-');
    DBMS_OUTPUT.PUT_LINE(S);
    CLOSE M;
    END LOOP;
    END;
    /
      

  2.   

    --楼主这问题我喜欢
    --过程
    create or replace procedure test000(I_FUNDCODE in varchar2,I_PROVINCE in varchar2,RT_CURSOR out sys_refcursor) is
    begin
    open RT_CURSOR for select PV.NAME, PS.FUNDNAME,
      count(case when ct.age between 1 and 20 then 1 else null end) less20,
      count(case when ct.age between 21 and 40 then 1 else null end) less40,
      count(case when ct.age > 41 then 1 else null end) more40,
      sum(ts.curshare) curshare
      from CUSTOMERS ct, PROVINCE pv, TA_SHARE ts, PRODUCTS1 ps
      where pv.id = ct.province
      and ct.taaccoid = TS.TAACCOID
      and TS.FUNDCODE = I_FUNDCODE
      and pv.name=I_PROVINCE
      group by PV.NAME, PS.FUNDNAME
      order by 1, 2;
    end;
    --调用
    declare
    I_FUNDCODE varchar2(50);
    I_PROVINCE varchar2(50);
    p_name varchar2(50);
    f_name varchar2(50);
    v1 number; 
    v2 number;
    v3 number;
    v4 number;
    cur sys_refcursor;
    begin
    I_FUNDCODE:='110001';
    I_PROVINCE:='北京';
    test000(I_FUNDCODE,I_PROVINCE,cur);
    fetch cur into p_name,f_name,v1,v2,v3,v4;
    while cur%found loop
    dbms_output.put_line(p_name||'-'||f_name||'-'||to_char(v1)||'-'||to_char(v2)||'-'||to_char(v3)||'-'||to_char(v4));
    fetch cur into p_name,f_name,v1,v2,v3,v4;
    end loop;
    close cur;
    end;
    v1 number; --少于20的
    v2 number; --大于20少于40
    v3 number; --大于40的
    v4 number; --sum(ts.curshare)