文档首页 > > 开发指南> 存储过程> 游标> 游标循环

游标循环

分享
更新时间: 2019/06/24 GMT+08:00

游标在WHILE语句、LOOP语句中的使用称为游标循环,一般这种循环都需要使用OPEN、FETCH和CLOSE语句。下面要介绍的一种循环不需要这些操作,可以简化游标循环的操作,这种循环方式适用于静态游标的循环,不用执行静态游标的四个步骤。

语法

FOR AS循环的语法请参见图1

图1 FOR_AS_loop::=

注意事项

  • 不能在该循环语句中对查询的表进行更新操作。
  • 变量loop_name会自动定义且只在此循环中有效,类型和select_statement的查询结果类型一致。loop_name的取值就是select_statement的查询结果。
  • 游标的属性中%FOUND、%NOTFOUND、%ROWCOUNT在DWS数据库中都是访问同一个内部变量,事务和匿名块不支持多个游标同时访问。

示例

BEGIN
FOR ROW_TRANS IN 
        SELECT first_name FROM hr.staffs 
    LOOP 
        DBMS_OUTPUT.PUT_LINE (ROW_TRANS.first_name );
    END LOOP;
END;
/

--创建表
CREATE TABLE integerTable1( A INTEGER)DISTRIBUTE BY hash(A);
CREATE TABLE integerTable2( B INTEGER) DISTRIBUTE BY hash(B);
INSERT INTO integerTable2 VALUES(2);

--多游标共享游标属性的标量
DECLARE
   CURSOR C1 IS SELECT A FROM integerTable1;--声明游标
   CURSOR C2 IS SELECT B FROM integerTable2;
   PI_A INTEGER;
   PI_B INTEGER;
BEGIN
   OPEN C1;--打开游标
   OPEN C2;
   FETCH C1 INTO PI_A; ----  C1%FOUND 和 C2%FOUND 值为 FALSE
   FETCH C2 INTO PI_B; ----  C1%FOUND 和 C2%FOUND 的值都为 TRUE
   --判断游标状态
   IF C1%FOUND THEN
       IF C2%FOUND THEN
         DBMS_OUTPUT.PUT_LINE('Dual cursor share paremeter.');
      END IF;
   END IF;
   CLOSE C1;--关闭游标
   CLOSE C2;
END;
/

--删除临时表
DROP TABLE integerTable1;
DROP TABLE integerTable2;
分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

跳转到云社区