使用FOR循环遍历显式游标时,自动执行游标的OPEN、FETCH、CLOSE语句和循环语句的功能,即进入循环时,游标FOR循环语句自动打开游标,并提取第一行游标数据,当程序处理完当前所提取的数据而进入下一次循环时,游标FOR循环语句自动提取下一行数据供程序处理,当提取完结果集合中的所有数据行后结束循环,并自动关闭游标。如果在循环体内执行游标的OPEN、FETCH、CLOSE语句,会返回“INVALID_CURSOR”的错误。
使用FOR循环遍历游标时,如果关键字IN后面是游标名,则该游标名必须是显式游标或者引用游标的名称。
使用FOR循环遍历隐式游标时,关键字IN后面必须是一个SELECT语句。
语法格式
使用FOR循环遍历隐式游标。
FOR index_name IN select_statement LOOP statement;
END LOOP;
使用FOR循环遍历显式游标。
FOR index_name IN cursor_name LOOP statement;
END LOOP;
参数说明
index_name
循环变量的名称。
cursor_name
FOR循环要遍历的游标的名称。
select_statement
SELECT语句。指定隐式游标的遍历列表。
statement
循环体。不允许为空。
示例
使用FOR循环遍历显式游标。
DECLARE CURSOR c1 IS SELECT a,b FROM test ORDER BY a; BEGIN DELETE FROM test; INSERT INTO test(a,b) VALUES(1,100); INSERT INTO test(a,b) VALUES(1,100); FOR item IN c1 LOOP DBMS_OUTPUT.PUT_LINE('A = ' || item.a || ',B = ' || item.b); DBMS_OUTPUT.PUT_LINE('CURSOR%ISOPEN is ' || c1%ISOPEN); DBMS_OUTPUT.PUT_LINE('CURSOR%FOUND is ' || c1%FOUND); DBMS_OUTPUT.PUT_LINE('CURSOR%NOTFOUND is ' || c1%NOTFOUND); DBMS_OUTPUT.PUT_LINE('CURSOR%ROWCOUNT is ' || c1%ROWCOUNT); END LOOP; DBMS_OUTPUT.PUT_LINE('after for loop'); DBMS_OUTPUT.PUT_LINE('CURSOR%ISOPEN is ' || c1%ISOPEN); END; /
使用FOR循环遍历隐式游标
BEGIN FOR a IN(SELECT * FROM emp WHERE ename LIKE '%zhangsan%' AND sal > 9000 ORDER BY empno;) LOOP DBMS_OUTPUT.PUT_LINE('a is emp:'||a.empno||'name:'||a.ename||'job:'||a.job||'sal:'||a.sal); DBMS_OUTPUT.PUT_LINE(sql%rowcount); END LOOP;END; /
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。