创建存储过程:
SQL>create or replace procedure test_p(out_var out sys_refcursor) 
SQL>as 
SQL>begin 
SQL>open out_var for select * from test; 
SQL>end; 
SQL>/ 
调用存储过程:
SQL>declare 
SQL>v_out sys_refcursor; 
SQL>begin 
SQL>test_p(v_out); 
SQL>end; 
SQL>print :v_out;
SQL>/出现错误提示:PLS-00103: 出现符号 "PRINT"
????

解决方案 »

  1.   

    你的有问题,应该写在:
    var v_out refcursor; 
    begin 
    test_p(:v_out); 
    end; 
    print :v_out; 
      

  2.   

    set serverout on;SQL>declare 
    SQL>v_out sys_refcursor; 
    SQL>begin 
    SQL>test_p(v_out); 
    SQL>end; 
    SQL>dbms_output.put_line(v_out); 
    SQL>/ 
      

  3.   

    SQL>declare
    SQL>v_out sys_refcursor;
    SQL>begin
    SQL>test_p(v_out);
    SQL>dbms_output.put_line(v_out.xx);--因为是游标返回值。
    SQL>end;
    /
      

  4.   

    declare
    v_out sys_refcursor;
    v_test test%rowtype;
    begin
    test_p(v_out);
    loop
    fetch v_out into v_test
    dbms_output.put_line(v_test.xx);--因为是游标返回值。
    end loop;
    close v_out;
    end;
    /
    再试试。
      

  5.   

    少了个exitwhendeclare
    v_out sys_refcursor;
    v_test test%rowtype;
    begin
    test_p(v_out);
    loop
    fetch v_out into v_test;
    exit when v_out%notfound;
    dbms_output.put_line(v_test.xx);
    close v_out;
    end;
    /
    xx要换成test的列名,刚测试过了。可以的
      

  6.   

    scott@STUDY> create or replace procedure test_p(out_var out sys_refcursor)
      2  as
      3  begin
      4  open out_var for select * from test;
      5  end;
      6  /过程已创建。scott@STUDY> var v_out refcursor;
    scott@STUDY> begin
      2  test_p(:v_out);
      3  end;
      4  /PL/SQL 过程已成功完成。scott@STUDY> print :v_out;   CITY_ID PROVINCE_ID
    ---------- -----------
             1           2
           100           1
           101           4
           102           1已用时间:  00: 00: 00.01
      

  7.   

    9楼:按你的方法:
    SQL> var v_out refcursor;
    REFCURSOR not supported显示这个提示错误
      

  8.   

    declare
    v_out sys_refcursor;
    v_test test%rowtype;
    begin
    test_p(v_out);
    loop
    fetch v_out into v_test;
    exit when v_out%notfound;
    dbms_output.put_line(v_test.xx);
    end loop;
    close v_out;
    end;
    /
    不好意思少了个end loop;自己可以调试阿。
      

  9.   

    我知道了,你是用pl/sql的command window 来执行的。是这个工具的问题,你用sqlplus就可以执行了
      

  10.   

    11楼,你写这么多,但是没有print命令好用的。 
      

  11.   

    我是用这个工具PLSQL Developer 7.0.2.1076执行的
      

  12.   

    13楼,怎么用print,这个工具PLSQL Developer 7.0.2.1076可以不用(print)呢?
      

  13.   

    我的pl/sql developer 7.1.5.1398上都会报错,说明是这个工具有问题,不支持。建议用sqlplus