2012-11-24 4 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