
BEGIN
DECLARE l_sum int
DECLARE l_Sdeptno int
DECLARE l_sno int
DECLARE l_sumBefore int
DECLARE done, done2 INT DEFAULT 0
DECLARE cur_out cursor for select SdeptNo,population from Department
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1
OPEN cur_out
REPEAT
SET l_sum=0
FETCH cur_out INTO l_Sdeptno,l_sumBefore
IF NOT done THEN
BEGIN
DECLARE cur_inner cursor for select Sno from student where SdeptNo=l_Sdeptno
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done2 = 1
OPEN cur_inner
REPEAT
FETCH cur_inner into l_sno
IF NOT done2 THEN
SET ps_count = 0
SET l_sum=l_sum+1
END IF
UNTIL done2
END REPEAT
CLOSE cur_inner
SET done2 = 0
END
IF(l_sum<>l_sumBefore) THEN
update department SET population=l_sum where SdeptNo=l_Sdeptno
select l_Sdeptno INTO Sdeptno
select SdeptName INTO Sdeptname from Department where SdeptNo=l_Sdeptno
select l_sumBefore INTO sumBefore
select l_sum INTO sumAfter
end IF
END IF
UNTIL done
END REPEAT
CLOSE cur_out
END
是游标里面嵌套游标吗?数据量大的话最好不要采用这种方法!这是SQL SERVER的:
DECLARE CUR_1 CURSOR--第一层游标声明
FOR SELECT C_1,C_2 FROM TABLENAME
OPEN CUR_1
FETCH NEXT FROM CUR_1 INTO @C_1,@C_2
WHILE @@FETCH_STATUES<>0
BEGIN
DECLARE CUR_2 CURSOR--第二层游标声明
FOR SELECT A_1,A_2 FROM TABLENAME
OPEN CUR_2
FETCH NEXT FROM CUR_2 INTO @C_1,@C_2
WHILE @@FETCH_STATUES<>0
BEGIN
.....
.....
FETCH NEXT FROM CUR_2 INTO @A_1,@A_2--二层循环
END
CLOSE CUR_2
DEALLOCATE CUR_2
FETCH NEXT FROM CUR_1 INTO @C_1,@C_2--一层循环
END
CLOSE CUR_1
DEALLOCATE CUR_1
要其他数据库的游标找我。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)