DECLARE
  var_cursor SYS_REFCURSOR;
BEGIN
  procedure_name(p_1 => NULL,
                 p_2 => NULL,
                 p_3 => NULL,
                 p_cursor => var_cursor);
  FOR i IN var_cursor LOOP
    dbms_output.put_line(i.col_name);
  END LOOP;
END;我的意图是:
首先定义一个游标var_cursor。
然后执行一个存储过程procedure_name,它有四个参数,前三个都给他NULL,第四个是一个out游标,我将它赋给了上面定义的var_cursor。
然后遍历游标,把值输出。
报错在FOR i IN var_cursor LOOP这里,错误是PLS-00221: 'var_cursor' is not a procedure or is undefined。为啥会报错,帮忙看一下。谢谢大家。

解决方案 »

  1.   

    p_cursor是sys_refcursor类型传出参数吗FOR i IN var_cursor LOOP
        dbms_output.put_line(i.col_name);
      END LOOP;
    确认var_cursor处于打开状态
    改成
    loop
    fetch var_cursor into v1,v2,v3;--变量要定义
    exit when var_cursor%notfound;
    dbms_output.put_line(v1);
    end;
    close var_cursor;
      

  2.   

    是不是要用 :var_cursor  
      

  3.   

    用系统游标
    sys_refcursor 
    在不行  加群  :2987841
      

  4.   

    sys_refcursor 不支持for in loop获取值只能用fetch的方式SQL> declare
      2  var_cursor SYS_REFCURSOR;
      3  v_id number;
      4  begin
      5  open var_cursor for select 1 id from dual;
      6  loop
      7  fetch var_cursor into v_id;
      8  exit when var_cursor%notfound;
      9  dbms_output.put_line(v_id);
     10  end loop;
     11  end;
     12  /
    1PL/SQL procedure successfully completed.