最近在做把sas转换为db2存储过程的工作,额,对于之前没写过存储过程的我来说是一次锻炼,下面是简单的DB2存储过程游标的使用
CREATE OR REPLACE PROCEDURE ***.ZXMCOURE1 ( )
SPECIFIC ZXMCOURE1
LANGUAGE SQL
NOT DETERMINISTIC
EXTERNAL ACTION
MODIFIES SQL DATA
CALLED ON NULL INPUT
INHERIT SPECIAL REGISTERS
OLD SAVEPOINT LEVEL
BEGIN
--这个存储过程的目的是遍历ZXMTEST1表的数据,
--然后每次遍历都更改ZXMTEST2 表的age值,当每次遍历的数据的likedoing 等于ZXMTEST2 的 likedoing的时候
DECLARE count INTEGER;
DECLARE start_index INTEGER;
--一定要先声明这些变量,否则会报错
DECLARE name VARCHAR(20);
DECLARE age VARCHAR(20);
DECLARE likedoing VARCHAR(20);
--声明游标
DECLARE cursor1 CURSOR with hold FOR cursor1_sql;
--创建count变量,其值为表ZXMTEST1数据总的个数,下面遍历的时候作为结束条件
SET v_query_str='
SELECT COUNT(1) FROM SIBPC.ZXMTEST1
';
CALL 调用别的存储过程创建变量 (v_query_str,count);
--查询ZXMTEST1的数据
SET v_query_str='
SELECT
name,age,likedoing
FROM
ZXMTEST1
';
PREPARE cursor1_sql FROM v_query_str;
set start_index=0;
--打开游标
OPEN cursor1;
while start_index < count do
fetch cursor1 into name,age,likedoing;
set v_query_str = '
update ZXMTEST2
set age='''||age||'''
where likedoing='''||likedoing||'''
';
EXECUTE IMMEDIATE v_query_str;
commit;
set start_index = start_index+1;
end while;
--关闭游标
close cursor1;
END;