CREATE PROCEDURE A()
BEGIN
     DECLARE 'Constraint Violation' 
     CONDITION FOR sqlexception;
     DECLARE EXIT HANDLER FOR
     'Constraint Violation' ROLLBACK;     
BEGIN TRANSACTION;
insert into A(vName) VALUES('a'); 
COMMIT; 
end;
上面是我写的代码,调试不成功。。现在希望执行这个存储过程的时候,过程中间发生错误,提示错误,再回滚。如果写成这样:declare exit handler for sqlexception rollback;在程序调用的时候,就不会提示错误,直接回滚了,这样我就无法跟踪到错误了。。

解决方案 »

  1.   

    mysql> delimiter //
    mysql>
    mysql> CREATE PROCEDURE A()
        -> BEGIN
        ->     declare exit handler for sqlexception select 'ERROR'; rollback;
        ->
        -> insert into A(vName) VALUES('a');
        -> COMMIT;
        -> end;
        -> //
    Query OK, 0 rows affected (0.00 sec)mysql> call a()//
    +-------+
    | ERROR |
    +-------+
    | ERROR |
    +-------+
    1 row in set (0.00 sec)Query OK, 0 rows affected (0.00 sec)mysql>