BEGIN DECLARE EXCEPTION INT DEFAULT 0;
  DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET EXCEPTION = 1; START TRANSACTION; SET AUTOCOMMIT = 0; CALL SP_1; IF EXCEPTION = 1 THEN
ROLLBACK;
INSERT INTO `ERRORMESSAGE` SELECT 'ERROR!',NULL;
ELSE
COMMIT;
END IF; SET AUTOCOMMIT = 1;END这个是SP里面的内容,运行的时候会在ERRORMESSAGE里面写入'ERROR!',并回滚,也就是说中间有地方出错了,但是改成下面这样运行时一切正常:BEGIN
                  START TRANSACTION; SET AUTOCOMMIT = 0; CALL SP_1; COMMIT; SET AUTOCOMMIT = 1;END仅仅是把DECLARE CONTINUE HANDLER的相关语句去掉而已,难道说是DECLARE CONTINUE HANDLER语句有问题吗?我看了半天没看出问题来

解决方案 »

  1.   

     DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET EXCEPTION = 1;
    的意思是不管是否发生错误,都继续往下执行。在EBGIN之前SET EXCEPTION = 1;试试
      

  2.   

    一样的,我试了一下只要加上DECLARE CONTINUE HANDLER 就能捕获到异常,然后回滚,但是不用DECLARE CONTINUE HANDLER 的话,运行起来一点问题也没有,所以怀疑是不是问题出在DECLARE CONTINUE HANDLER 上面了。
      

  3.   

    DECLARE CONTINUE HANDLER 不应该用在循环体内吗?
    你这没循环啊。
      

  4.   

    现在的问题就是用DECLARE HANDLER能捕获到异常,但是看不出来是什么异常,把捕获异常的语句去掉以后运行又一切正常,没有报异常,太奇怪了。有没有什么办法能看到DECLARE HANDLER FOR SQLEXCEPTION捕获到的是什么异常?