2012-11-24 39 views
1

我已经定义了这样的函数 -MySQL的回滚在交易

... 
DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK; 
DECLARE EXIT HANDLER FOR SQLWARNING ROLLBACK SET error_key = 1 AND error_message = 'Failed -- Rollback.'; 
BEGIN 
    SELECT 'Insert Failed.'; 
    CALL log_error(error_key, error_message); 
END ; 

START TRANSACTION; 

    DECLARE EXIT HANDLER FOR 1062 SET error_key = 02 AND error_message = 'Insert Failed'; 
    BEGIN 
     SELECT 'Attempt to create a duplicate entry in the follow table.'; 
     CALL log_error(error_key, error_message); 
     END; 
     INSERT INTO `user_table` (...) VALUES (...); 

     /* Call the trigger to update the profile table */ 
     CALL updateAnotherTable(@result1); 
     CALL updateAnotherTable1(@result2); 

IF @retsult1=0 OR @retsult2=0 THEN 
    ROLLBACK; 
ELSE 
    COMMIT; 
END IF; 
... 

我收到以下错误 -

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK; DECLARE EXIT HANDLER FOR SQL 

编辑

我更新了我的PROC我仍然得到错误..

DECLARE exit handler for sqlexception sqlwarning 
BEGIN   
     SET error_key = 901; 
     SET error_message = 'Insert Failed.'; 
     CALL log_error(error_key, error_message); 
     ROLLBACK; 
END; 

回答

0

当在处理器使用复合语句,你需要将它们嵌入在BEGIN ... END块:

DECLARE EXIT HANDLER FOR 1062 
BEGIN 
    SET error_key = 02; 
    SET error_message = 'Insert Failed'; 
END 

参考MySQL手册的DECLARE HANDLER部分获取更多信息。

+1

我对代码进行了更改..但是我仍然收到相同的错误.. – Fox