db2存储过程while循环问题

环境:版本:db2 v9.7.10  OS:aix 现有一个存储过程,使用游标和while循环,在循环中执行了一个SQL语句时能够正常循环执行,但执行多个SQL语句时则不能循环执行。代码: CREATE OR REPLACE PROCEDURE SPYW.PRO_TEST9 ( OUT P_COUNTER INTEGER ) --测试循环插入,先执行清空表操...显示全部
环境:版本:db2 v9.7.10  OS:aix


现有一个存储过程,使用游标和while循环,在循环中执行了一个SQL语句时能够正常循环执行,但执行多个SQL语句时则不能循环执行。


代码:
CREATE OR REPLACE PROCEDURE SPYW.PRO_TEST9 ( OUT P_COUNTER INTEGER )
--测试循环插入,先执行清空表操作再向表中插入数据
L1: BEGIN
DECLARE v_at_end,v_counter INTEGER DEFAULT 0;
DECLARE v_tabname,v_tabname2 VARCHAR(100);
DECLARE v_sql1,v_sql2 VARCHAR(100);
DECLARE c1 CURSOR
FOR select tabname,tabname2 FROM test0602; --test0602的两个字段的属性是库中已存在的表名
DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_at_end = 1;
OPEN c1;
FETCH c1 INTO v_tabname,v_tabname2;
WHILE (v_at_end = 0)
DO

set v_sql1= 'delete from '||v_tabname;--先执行清空表操作
set v_sql2= 'insert into '||v_tabname||' select * from '||v_tabname2;--再向表中插入数据
prepare v_stmt1 from v_sql1;
execute v_stmt1;
prepare v_stmt2 from v_sql2;
execute v_stmt2;
SET v_counter = v_counter + 1;
FETCH c1 INTO v_tabname,v_tabname2;
END WHILE;
SET p_counter = v_counter;
END L1;


请问如何修改才能正常循环收起
参与7

查看其它 5 个回答zhujink的回答

zhujinkzhujink商业智能工程师未知
游标自己放在for循环中进行,无须自己控制开关:
create procedure Test(

out v_message varchar(500)

)

LANGUAGE SQL

BEGIN

DECLARE v_city char(20);

DECLARE v_count int;



SET v_message = '';



FOR V1 AS CURSOR1 CURSOR FOR  select city as v_city from test

DO

set v_message = v_message||v_city||' ';

END FOR;   



END@

运行结果:

call Test(?)

completed successfully.



输出参数的值

--------------------------

参数名: V_MESSAGE

参数值: wuhan                hangzhou             chengdu              



返回状态 = 0

Statement processed successfully in 0.18 secs.

引用自:
http://zhuyuehua.iteye.com/blog/882826
银行 · 2015-06-15
浏览2084

回答者

zhujink
商业智能工程师未知

zhujink 最近回答过的问题

回答状态

  • 发布时间:2015-06-15
  • 关注会员:1 人
  • 回答浏览:2084
  • X社区推广