26

プロシージャで発生する可能性のあるエラーや警告をキャッチして再スローする方法がどこにも見つからないようです。

私が欲しいのは、次のことを行う構文です。

create procedure myProcedure()
  begin

      declare exit handler for ANYTHING_WRONG_THAT_CAN_BE_CAUGHT_WARNINGS_INCLUDED
      begin
          rollback;
          RE_THROW THE_THING_THAT_WAS_CAUGHT;
      end;

      start transaction;
         -- do some stuff
      commit;
  end; //

その理由は、エラーまたは警告でロールバックを強制したいが、特定のエラーをどうするかを決定するのはクライアントに任せたいからです。

オールキャップの部分は何を入れたらいいのかわからない部分です。

助けてくれてありがとう!

編集 - - - -

それ以来、私が求めたことを実行することは不可能であることを知りました:'(。

代わりに、問題が発生した場合に単一のエラーが発生し、次のコードを使用しました。

declare exit handler for sqlwarning, sqlexception begin
    rollback;
    call error();
end;

(error() は存在しません)

4

1 に答える 1

29

すべての SQL 例外をキャッチするには、次を使用します。

DECLARE EXIT HANDLER FOR SQLEXCEPTION

SQLWARNINGS警告をキャッチするためにも使用できます。

例外ハンドラー内で、キャッチされたばかりのエラーまたは警告を発生させるには、次を使用します。

RESIGNAL

RESIGNAL ステートメントのドキュメントを参照してください。

http://dev.mysql.com/doc/refman/5.5/en/resignal.html

これは MySQL 5.5 以降で利用可能です

于 2013-09-18T06:37:38.677 に答える