DB2存储过程游标使用

最近在做把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;


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值