异常(condition)处理

这个在写存储过程会经常用到
当存储过程中的语句返回的SQLSTATE值超过00000的时候,就表明在存储过程中产生了一个异常(condition),它表示出现了错误、数据没有找到或者出现了警告。
   声明异常处理器  DECLARE handler-type HANDLER FOR condition handler-action
    CONTINUE 在处理器操作完成之后,会继续执行产生这个异常语句之后的下一条语句。
  EXIT 在处理器操作完成之后,存储过程会终止,并将控制返回给调用者。
  UNDO 在处理器操作执行之前,DB2会回滚存储过程中执行的SQL操作。在处理器操作完成之后,存储过程会终止,并将控制返回给调用者。
DECLARE EXIT HANDLER FOR SQLEXCEPTION
处理器可以由单独的存储过程语句定义,也可以使用由BEGIN…END块界定的复合语句定义。(注意在执行复合语句的时候,SQLSATE和SQLCODE的值会被改变,如果需要保留异常前的SQLSATE和SQLCODE,就需要在执行复合语句的第一个语句把SQLSATE和SQLCODE赋予本地变量或参数。)
举例:
     DECLARE EXIT handler FOR sqlexception
    BEGIN
            VALUES(SQLCODE ,SQLSTATE) INTO v_retval ,  v_strState;
            SET v_retmsg = v_retmsg || '处理失败,其中SQLSTATE:'||v_strState;
            ROLLBACK;
            --也可以在这里把信息插入日志表。
    END;
参与6

6 同行回答

wwhalxj wwhalxj 项目经理 亚信联创科技(中国)有限公司
支持一下,!!!显示全部
支持一下,!!! 收起
IT分销/经销 · 2009-04-22
浏览602
谢谢,好东东!显示全部
谢谢,好东东! 收起
2009-04-21
浏览532
mhb1976 mhb1976 数据库运维工程师 中软国际
好东西,谢谢!!显示全部
好东西,谢谢!! 收起
金融其它 · 2009-04-15
浏览550
好,学学,记住显示全部
好,学学,记住 收起
2009-04-10
浏览524
CREATE PROCEDURE handler()      LANGUAGE SQLBEGINdeclare r_code int;declare err_msg char(64);declare SQLCODE          integer default 0;DECLARE continue HANDLER FOR SQLEXCEPTIONbeginset r_code=SQLCODE...显示全部
CREATE PROCEDURE handler()
      LANGUAGE SQL
BEGIN
declare r_code int;
declare err_msg char(64);
declare SQLCODE          integer default 0;

DECLARE continue HANDLER FOR SQLEXCEPTION
begin
set r_code=SQLCODE;
set err_msg='处理'||char(r_code)||'出错';
insert into t2 values(r_code,err_msg);
end;
insert into t1 values(3);

insert into t1 values(30);
END                     
:) 收起
2009-04-10
浏览642

提问者

评论0

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2008-05-14
  • 关注会员:0 人
  • 问题浏览:4443
  • 最近回答:2009-04-22
  • X社区推广