暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

华为GaussDB T 循环遍历游标FOR IN LOOP

原创 章芋文 2019-09-27
2374

使用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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论