DB2存储过程中对动态游标的正确使用方案


  本文标签:DB2存储过程

  此文章主要介绍的是DB2存储过程中对动态游标的正确使用,相信如果你掌握了DB2存储过程中对动态游标的正确使用这项技术,会在以后的学习或是工作中带来很大的帮助,以下就是文章的主要内容的详细描述  。

  1. CREATE PROCEDURE data_wtptest( IN in_taskid_timestamp varchar(30),  
  2. OUT o_err_no int,  
  3. OUT o_err_msg varchar(1024))  
  4. LANGUAGE SQL  
  5. P1: BEGIN ATOMIC  

  

  声明开始

  

  临时变量出错变量

  

  1. DECLARE SQLCODE integer default 0;  
  2. DECLARE SQLStmt varchar(1024) default ;  
  3. DECLARE r_code integer default 0;  
  4. DECLARE state varchar(1024) default AAA; 

  记录程序当前所作工作

  1. DECLARE at_end int DEFAULT 0;  
  2. DECLARE t_destnetid int default 0;  
  3. DECLARE t_recvid varchar(30) default ;  
  4. DECLARE SP_Name varchar(50) default data_integrate; 

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

  

  声明动态游标存储变量

  

  1. DECLARE stmt1 STATEMENT;  
  2. DECLARE c1 CURSOR FOR stmt1; 

  声明出错处理

  1. DECLARE EXIT HANDLER FOR SQLEXCEPTION  
  2. begin  
  3. set r_code=SQLCODE;  
  4. set o_err_no=1

  set o_err_msg=处理[||state||]出错 ,||错误代码SQLCODE:[||CHAR(r_code) || ].;

  

  1. insert into fcc_sp_log(object,name,value) values(SP_Name,in_taskid_timestamp,o_err_msg);  
  2. end;  
  3. DECLARE continue HANDLER for not found  
  4. begin  
  5. set at_end = 1

  set state=找到0行记录或已经到记录结尾.;

  

  end;

  

  声明结束

  

  SET state=[add]单独测试中中,统计条数;

  1. SET SQLStmt=SELECT count(*) FROM wtp_pre_download where task_timestamp = ?;  
  2. PREPARE stmt1 FROM SQLStmt;  
  3. OPEN c1 USING in_taskid_timestamp;  
  4. FETCH c1 INTO t_destnetid;  
  5. CLOSE c1; 

  SET state=[add]查具体信息;

  1. SET at_end = 0;  
  2. SET SQLStmt=SELECT recv_userid FROM wtp_pre_download where task_timestamp = ?;  
  3. PREPARE c1 FROM SQLStmt;  
  4. OPEN c1 USING in_taskid_timestamp;  
  5. SET state=[add]************;  
  6. FETCH c1 INTO t_recvid;  
  7. SET state=[add]============;  
  8. insert into fcc_sp_log(object,name,value) values(SP_Name,in_taskid_timestamp,t_recvid);  
  9. END p1 

  以上的相关内容就是对DB2存储过程中使用动态游标的介绍,望你能有所收获  。