DB2 游标使用

本文介绍了三种不同的SQL游标使用方式,包括使用变量进行数据更新及通过存储过程返回结果集的方法。探讨了不同游标的声明、打开及结果集返回机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一种

begin

declare v_count integer;
declare v_name varchar(10);
declare v_age int;
declare v_id int;

select count(*) into v_count from tb_user;

begin

declare c_user cursor for select id, user_name, user_age from tb_user;

open c_user;

while (v_count > 0) do

fetch c_user into v_id, v_name, v_age;

set v_name = v_name || '_u';

set v_age = v_age * 2;

update tb_user set user_name = v_name, user_age = v_age where id = v_id;

set v_count = v_count - 1;

end while;

close c_user;

end;

end @


 

第二种

begin

declare v_name varchar(10);

declare v_age int;

declare v_id int;

for v1 as c_user cursor for select id, user_name, user_age from tb_user;

do

fetch c_user into v_id, v_name, v_age;

set v_name = v_name || '_u';

set v_age = v_age * 2;

update tb_user set user_name = v_name, user_age = v_age where id = v_id;

end for;

end @

 

感觉有问题,因为只更新了奇数行的数据。

 

第三种

create procedure pro_select_user

DYNAMIC RESULT SETS 1

LANGUAGE SQL

begin

DECLARE SQLCODE INT;

DECLARE v_errCode INT DEFAULT 0;

DECLARE CONTINUE HANDLER FOR SQLEXCEPTION



BEGIN

SET v_errCode = SQLCODE;

END;

BEGIN

DECLARE v_cur CURSOR WITH HOLD WITH RETURN TO CALLER FOR

SELECT * FROM tb_user;

OPEN v_cur;

END;



RETURN v_errCode;

END@

 

RESULT SETS 1表示返回一个结果集

2个结果集:

create procedure pro_select_user

DYNAMIC RESULT SETS 2

LANGUAGE SQL

begin

DECLARE SQLCODE INT;

DECLARE v_errCode INT DEFAULT 0;

DECLARE CONTINUE HANDLER FOR SQLEXCEPTION



BEGIN

SET v_errCode = SQLCODE;

END;

BEGIN

DECLARE v_cur1 CURSOR WITH RETURN TO CALLER FOR SELECT * FROM tb_user;

DECLARE v_cur2 CURSOR WITH RETURN TO CALLER FOR SELECT * FROM tb_user;

OPEN v_cur1;

OPEN v_cur2;

END;



RETURN v_errCode;

END@

 

 

WITHOUT RETURN/WITH return

 

选项指定游标的结果表是否用于作为从一个过程中返回的结果集。

 

WITH RETURN TO CALLER   

选项指定将来自游标的结果集返回给调用者,后者可以是另一个过程或一个客户机应用程序。这是默认选项。

 

WITH RETURN TO CLIENT   

选项指定将来自游标的结果集返回给客户机应用程序,绕过任何中间的嵌套过程。

 

若要从一个过程中返回结果集,需要:

创建一个过程,创建时指定 DYNAMIC RESULT SETS 子句。

声明游标,声明时指定 WITH RETURN 子句。

打开该游标,并使之保持 open 状态。

如果关闭该游标,则结果集将不能返回给调用者应用程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值