DB2存储过程报错回滚示例

需要注意的问题:

1.DB2存储过程会在SQL执行完成后,将返回信息赋值给SQLCODE和SQLSTATE。这两个DB2内置变量在使用前需要定义。

2.定义UNDO类型的异常处理,在定义后面可以跟上操作语句。

3.UNDO类型的异常处理,必须是处理原子操作的SQL块,DB2默认不是原子操作的。在BEGIN跟上ATOMIC即可。


CREATE OR REPLACE PROCEDURE TEST (
    IN num INTEGER,
    OUT P_ERRORCODE VARCHAR(256), --SQL返回码
    OUT P_ERRORDESC VARCHAR(1024)) -- SQL返回信息
BEGIN ATOMIC

  DECLARE SQLCODE INTEGER DEFAULT 0;
  DECLARE SQLSTATE CHAR(5) DEFAULT '00000';
  -- 定义一个UNDO类型的异常处理
  DECLARE UNDO HANDLER FOR SQLEXCEPTION set P_ERRORCODE = to_char(sqlcode), P_ERRORDESC = '处理失败';
  
  update userinfo t set t.usercode = '000000000003' where t.usercode='000000000002';
  update userinfo t set t.usercode = '00000000000100' where t.usercode='000000000001'; --这里会因usercode字段超长出现异常
  
  set P_ERRORCODE = to_char(abs(SQLCODE));
  set P_ERRORDESC = '处理成功';
  
END;


你可能感兴趣的:(异常处理,存储过程,db2)