登录  注册    首页

技巧解读:DB2数据库对动态游标的使用

17
2010-09-3 9:38   发布 月儿弯 出处:比特网    评论 0  访问次数 437   分类 数据库

  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_integrate';

  声明DB2存储过程中放游标的值

  声明动态游标存储变量

  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='[add]单独测试中中,统计条数';

  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='[add]查具体信息';

  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='[add]************';

  FETCH c1 INTO t_recvid;

  SET state='[add]============';

  insert into fcc_sp_log(object,name,value)

  values(SP_Name,in_taskid_timestamp,t_recvid);

  END p1


登录注册 后评论
合作媒体 |