初学oracle,传递游标存储过程,返回总出错,帮忙看看
工具: pl/sql developer 7.0 (oracle 10g)--存储过程
CREATE OR REPLACE PROCEDURE p_test2(t_cur OUT SYS_REFCURSOR)
AS
BEGIN
OPEN t_cur FOR SELECT * FROM student;
END;--代码段
DECLARE 
cur SYS_REFCURSOR;
BEGIN
     school.p_test2(cur);
     print cur;        --系统提示PLS-00103错误
END;

解决方案 »

  1.   

    你不要使用print,直接使用dbms_out.put_line()格式化输出呢?
      

  2.   

    print好像只对共享变量有作用吧,你这样修改下,
    var SYS_REFCURSOR;
    BEGIN
      school.p_test2(cur);
      print cur; --系统提示PLS-00103错误
    END;
      

  3.   

    我修改为,结果为0(表里有10行记录)
    DECLARE
    cur SYS_REFCURSOR;
    BEGIN
         school.p_test2(cur);
         dbms_output.put_line(cur%ROWCOUNT);  --结果为0??怎么回事
    END;CREATE OR REPLACE PROCEDURE p_test2(t_cur OUT SYS_REFCURSOR)
    AS
    BEGIN
    OPEN t_cur FOR SELECT * FROM student;
    END;
      

  4.   

    你这样试下
    DECLARE
    cur SYS_REFCURSOR;
    BEGIN
      school.p_test2(cur);
      for curr in cur loop
      dbms_output.put_line(cur.colname); 
      end loop;
    END;
      

  5.   


    DECLARE  
    cur SYS_REFCURSOR;
    rec student%rowtype;
    BEGIN
      school.p_test2(cur);
    loop
    fetch cur into rec;
    exit when cur%notfound;
    dbms_output.put_line(rec.sno||','||rec.name||....);
    end loop;
    close cur;
    END;
      

  6.   

    --存储过程
    CREATE OR REPLACE PROCEDURE p_test2(t_cur OUT SYS_REFCURSOR)
    AS
    BEGIN
    OPEN t_cur FOR SELECT * FROM student;
    END;--代码段
    (这些在sqlplus里面执行) 
    var cur refcursor;
    school.p_test2(:cur);
    print cur;