gbless 发表于 2016-11-17 06:19:37

db2存储过程中使用动态游标(纯SQL例子)

CREATE PROCEDURE data_wtptest( IN in_taskid_timestamp varchar(30),

                                 OUT o_err_no int,
                                 OUT o_err_msg varchar(1024))
    LANGUAGE SQL

P1: BEGIN ATOMIC
   --声明开始
   --临时变量出错变量
       DECLARE SQLCODE       integer default 0;
       DECLARE SQLStmt       varchar(1024) default '';
       DECLARE r_code      integer default 0;
       DECLARE state         varchar(1024) default 'AAA';--记录程序当前所作工作
       DECLARE at_end      int DEFAULT 0;
       DECLARE t_destnetid   int default 0;
       DECLARE t_recvid      varchar(30) default '';
       DECLARE SP_Name         varchar(50) default 'data_wtptest';


   --声明放游标的值
   --声明动态游标存储变量
       DECLARE stmt1 STATEMENT;
       DECLARE c1 CURSOR FOR stmt1;

   --声明出错处理
       DECLARE EXIT HANDLER FOR SQLEXCEPTION
          begin
             set r_code=SQLCODE;
             set o_err_no=1;
             set o_err_msg='处理['||state||']出错 ,'||'错误代码SQLCODE:['||CHAR(r_code) || '].';
             insert into fcc_sp_log(object,name,value) values(SP_Name,in_taskid_timestamp,o_err_msg);
          end;
       DECLARE continue HANDLER for not found
          begin
             set at_end = 1;
             set state='找到0行记录或已经到记录结尾.';
          end;
   --声明结束

   SET state='单独测试中,统计条数';
            SET SQLStmt='SELECT count(*) FROM wtp_pre_download where task_timestamp = ?';
            PREPARE stmt1 FROM SQLStmt;
            OPEN c1 USING in_taskid_timestamp;
            FETCH c1 INTO t_destnetid;
            CLOSE c1;

            SET state='查具体信息';
            SET at_end = 0;
            SET SQLStmt='SELECT recv_userid FROM wtp_pre_download where task_timestamp = ?';
            PREPARE c1 FROM SQLStmt;
            OPEN c1 USING in_taskid_timestamp;
            SET state='************';
            FETCH c1 INTO t_recvid;
            SET state='============';
            insert into fcc_sp_log(object,name,value) values(SP_Name,in_taskid_timestamp,t_recvid);
   END p1
页: [1]
查看完整版本: db2存储过程中使用动态游标(纯SQL例子)