我用了2种循环的方式,对游标进行处理,发现一个让我疑问的地方,请大侠们指教:
for loop方式处理游标:
declare
cursor c_test is
select * from dept;
begin
for v in c_test loop
dbms_output.put_line(v.deptno||' '||v.dname);
end loop;
end;另一种while loop循环:
declare
cursor c is
select * from dept;
myrecord dept%ROWTYPE;
begin
open c;
fetch c into myrecord;
while c %found loop
dbms_output.put_line(myrecord.deptno);
fetch c into myrecord;
end loop;
close c;
end;
为什么for循环中不需要显示的打开和关闭游标,而while循环中需要呢

解决方案 »

  1.   

    for 游标会自动打开和关闭的。
      

  2.   

    已经是declare声明了的,应该不是隐式的吧!哪位高人有更合理的解释吗?
      

  3.   

    所谓隐式不是指游标的定义,
    而是在执行for的时候游标隐式的打开了.不用open cursor.
      

  4.   

    在for循环里面加一句if c%isopen .. 你就知道了.
      

  5.   

    insert,update,delete,select into内部也打开的隐式的游标,
    可以用以下属性判断:
    SQL%FOUND
    SQL%NOTFOUND
    SQL%ROWCOUNT
    SQL%ISOPEN具体见<<ReillyraclePLSQLProgrammingV3>>,英文的.
      

  6.   

    去看一下for 和 while 的区别
    这是定死的,就是for可以,while不行..