1

私はこのような関数を定義しました-

...
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; 
4

1 に答える 1

0

ハンドラーで複合ステートメントを使用する場合は、それらを BEGIN ... END ブロックに埋め込む必要があります。

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

詳細については、MySQL マニュアルのDECLARE HANDLERセクションを参照してください。

于 2012-11-24T05:20:31.187 に答える