declare 
type cur is ref cursor;
begin
    open cur for 'select * from tabs';
    for vRecord in cur loop
        dbms_output.put_line(vRecord.table_name);
    end loop;
end;这样做难道就不行吗?

解决方案 »

  1.   

    这样应该都可以拉!
    declare 
    begin
        for vRecord in select * from tabs loop
            dbms_output.put_line(vRecord.table_name);
        end loop;
    end;
      

  2.   

    为什么要这样?
    这样不就行了?
    begin
        for vRecord in (select * from tabs) loop
            dbms_output.put_line(vRecord.table_name);
        end loop;
    end;
      

  3.   

    动态游标应该这样:
    declare 
    type cur is ref cursor;
    c1 cur;
    begin
        open c1 for select * from tabs;
        for vRecord in cur loop
            dbms_output.put_line(vRecord.table_name);
        end loop;
    end;
    你没定义游标变量。
      

  4.   

    楼上,这样编写会报错的
    在 for vRecord in cur loop处
    说:invalid user of type name or subtype name
      

  5.   

    我忘了改变量名阿!楼主直接复制过去运行阿?
    declare 
    type cur is ref cursor;
    c1 cur;
    begin
        open c1 for select * from tabs;
        for vRecord in c1 loop
            dbms_output.put_line(vRecord.table_name);
        end loop;
    end;
    你没定义游标变量。
      

  6.   

    “for循环是全自动的,自动打开游标,自动提取,自动关闭,自动声明行级变量:”
    “动态游标是一个类型,应该用这个类型声明游标变量然后使用;”
    “游标被打开后就不能再被打开,所以动态游标被打开后,请不要再使用for循环;”所以动态游标不能用for循环,只能loop..fetch...。
      

  7.   

    这样应该行的 ,type cur is ref cursor; 是定义一个类型 ,不是定义一个游标,不可以直接用的。就像不能写varchar2:=XX
      

  8.   

    RobinHZ说的对,应该用loop ..fetch ..exit ..end loop:loop
      fetch cur into v_record;
      exit when sql%notfound;
      ...
    end loop;