绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
游标-游标循环
2020-01-16 16:27:49

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

语法

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

图1 FOR_AS_loop::=
GaussDB FOR_AS_loop::=

注意事项

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

示例

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;


分享好友

分享这个小栈给你的朋友们,一起进步吧。

GaussDB_数据库
创建时间:2020-01-06 16:21:44
华为GaussDB数据库小栈
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • GaussDB_数据库
    专家
戳我,来吐槽~