在游标遍历时,一定要fetch吗,不可以用cursor.name方式直接取吗(不用for loop的方式)?ref cursor类型游标好像不可以用for loop方式遍历?
open cursor  for ‘select......’;
for c1 in cursor loop
dbms_output.put(c1.name);
end loop;一致报cursor 未定义?有人能给一些解释吗?

解决方案 »

  1.   

    改成这样试下呢。
    for c1 in select...... loop
    dbms_output.put(c1.name);
    end loop;
      

  2.   

    --之前不是跟你说了吗?还在问
    --动态游标在open cursor for sql 打开后,不能再用for..loop
     declare 
       type c_result is ref cursor; 
       c1 table_name%rowtype; 
       sqlStr varchar2(100):= 'select * from ....'; 
     begin 
       open c_result for sqlStr; 
       loop 
           fetch c_result into c1; 
           exit when c_result%notfound; 
           dbms_output.put(c1.id); 
       end loop; 
       close c_result;  
     end; 
      

  3.   

    for cursor隐含了打开操作.所以对for的cursor在for之前open存在逻辑错误.
      

  4.   

    动态游标好像是不能与for配合 
    但是看了个帖子这样写不知道可行不
    DECLARE
       cur PLS_INTEGER := DBMS_SQL.OPEN_CURSOR;
       fdbk PLS_INTEGER;
    BEGIN
       DBMS_SQL.PARSE 
          (cur, 'SELECT * FROM emp WHERE deptno = 10', DBMS_SQL.NATIVE);   fdbk := DBMS_SQL.EXECUTE_CURSOR (cur);
       FOR Nfetch IN 1 .. 5
       LOOP
          /* On fetch #5 this will raise ORA-01002 */
          fdbk := DBMS_SQL.FETCH_ROWS (cur);
       END LOOP;
       DBMS_SQL.CLOSE_CURSOR (cur);
    END;
    来源
      

  5.   

    对于游标变量 必须的fetch来,游标变量的显示open cur for select....不是游标变量
    for i in cur loop
    .....
    end loop;
    --or
    for i in (select col... from tb) loop
    ...
    end loop;