在存储过程中使用了事务,分两个语句插入两张表,要的效果是如果发生异常,就回滚。
现在的问题是:能正常回滚,但是不知道怎么在程序中判断。在存储过程中定义了Handler:DECLARE CONTINUE HANDLER FOR SQLEXCEPTION ROLLBACK; 程序里面的try catch捕获不到异常,我认为是因为异常已经在存储处理了。最好能不用输出参数。

解决方案 »

  1.   

    可以取得上一条sql语句的影响行数select  ROW_COUNT()
      

  2.   

    ROW_COUNT()在Update中,如果前后值都一样,那会取得0,无法完全解决问题呢。
      

  3.   

    已自己解决,加入以下代码即可:
    #产生异常时,回滚,并且制造错误以便程序中能以捕获异常的方式获知操作失败。
        DECLARE EXIT HANDLER FOR SQLEXCEPTION
        BEGIN
            ROLLBACK;
            SELECT * FROM `CreateExceptionAfterRollback` LIMIT 1;
        END;