请问db2存储过程中游标嵌套游标使用问题

xiaohaozi2101 2007-01-27 05:25:54

P1: BEGIN
--声明变量
DECLARE ENDTABLE INT DEFAULT 0;
DECLARE vCORPNO varchar(20); --单位编号
DECLARE vCORPNAME varchar(50); --单位名称
DECLARE vBIZNO varchar(15); --业务编号
DECLARE vDATE varchar(10); --日期
DECLARE vAMT DECIMAL(18,2); --金额

--查询所有公司信息
DECLARE CORPSTAT CURSOR FOR
select corpno,corpname from corpInfo;
--根据公司编号获取汇入汇款信息
DECLARE INWARDSTAT CURSOR FOR
select bizNo,date,amt
from inword where corpno = vCORPNO;

OPEN CORPSTAT;
SET ENDTABLE = 0;
FETCH CORPSTAT INTO vCORPNO,vCORPNAME;
WHILE ENDTABLE = 0 DO
OPEN INWARDSTAT;
FETCH INWARDSTAT INTO vBIZNO,vDATE,vAMT;
insert into QRY_corpBalance(bizNo,date,amt) values(vBIZNO,vDATE,vAMT);
FETCH INWARDSTAT INTO vBIZNO,vDATE,vAMT;
CLOSE INWARDSTAT;
FETCH CORPSTAT INTO vBIZNO,vDATE,vAMT;
END WHILE;
CLOSE CORPSTAT;
END P1;


我想在游标中嵌套游标,根据第一个游标循环得出的一个公司编号,根据公司编号到另外一个表进行查询(就是执行第二个游标),但是老是进入到死循环中。为什么?这样写不行吗?在我定义的第二个INWARDSTAT 中vCORPNO条件会随着第一条游标的结果集自动更新查询条件吗? 谢谢。。。如果有游标中嵌套游标的例子就更好了。
...全文
2442 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zwbhanye 2009-02-08
  • 打赏
  • 举报
回复
”------------“
另个起一个行就可以了,这个问题我也不知道为什么。
我只知道是这么解决/
sky_flying520 2008-11-30
  • 打赏
  • 举报
回复
create procedure demo_test(
)
language sql
begin
declare s outputs;
declare id_x bigint;
declare account_x bigint;

declare cardno_1 varchar(10);
declare cartype_1 varchar(10);

declare cardno_2 varchar(10);
declare cartype_2 varchar(10);

declare v_notfound int default 0;--声明异常
declare cur cursor for
select distinct id_1,account_1 from table_1 where date_1<current date;
declare cur2 cursor for
select type_s,card_s from table_s;

declare continue handler for not found
begin
set v_notfound=1;
end;
open cur;
fetch cur into id_x,account_x;
while v_notfound=0 do
if(account_x=0) then
set account_x=1000;
else
--set account_x=1;
end if;
insert into table_2 values(id_x,account_x);
fetch cur into id_x,account_x;
end while;
close cur;

set v_notfound=1; --把v_notfound再一次设置成1
open cur2;
fetch cur2 into cardno_2,cartype_2;
while v_notfound=0 do ------------------
insert into table_3 values(cardno_2,cartype_2);
fetch cur2 into cardno_2,cartype_2;
end while;
end;

为什么程序到我打”------------“就不会执行了啊??
请各位高手指点一二。。。
QQ:634176233
UltraBejing 2008-05-01
  • 打赏
  • 举报
回复
以后需再关注,现在先帮你顶一下
caibw 2007-05-27
  • 打赏
  • 举报
回复
LOOP
fengxiarong707 2007-05-26
  • 打赏
  • 举报
回复
如果没有理解错误的话,下面的储存过程应该可以实现你的意思:
DROP PROCEDURE TESTFOR;
CREATE PROCEDURE TESTFOR()
LANGUAGE SQL
BEGIN
--声明变量
DECLARE ENDTABLE INT DEFAULT 0;
DECLARE vCORPNO varchar(20); -- 单位编号
DECLARE vCORPNAME varchar(50); -- 单位名称
DECLARE vBIZNO varchar(15); -- 业务编号
DECLARE vDATE varchar(10); -- 日期
DECLARE vAMT DECIMAL(18,2); --金额

FOR V1 AS CURSOR1 CURSOR FOR
select corpno AS vCORPNO,corpname AS vCORPNAME from corpInfo
DO
insert into QRY_corpBalance(bizNo,date,amt) select bizNo,date,amt from inword where corpno = vCORPNO;
END FOR;
COMMIT;
END;
wxd330522 2007-05-22
  • 打赏
  • 举报
回复
BOOKMARK

5,889

社区成员

发帖
与我相关
我的任务
社区描述
IBM DB2 是美国IBM公司开发的一套关系型数据库管理系统,它主要的运行环境为UNIX(包括IBM自家的AIX)、Linux、IBM i(旧称OS/400)、z/OS,以及Windows服务器版本
社区管理员
  • DB2
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧