エラーがなかった状況で「早期終了」が必要な場合は、@ piotrmによって投稿された承認済みの回答を使用してください。ただし、最も一般的には、エラー状態(特にSQLプロシージャ)が原因でエラーが発生します。
MySQL v5.5以降では、例外をスローできます。同じ結果を達成しますが、よりクリーンでより強力な方法で、例外ハンドラーなどを否定します。
方法は次のとおりです。
DECLARE CUSTOM_EXCEPTION CONDITION FOR SQLSTATE '45000';
IF <Some Error Condition> THEN
SIGNAL CUSTOM_EXCEPTION
SET MESSAGE_TEXT = 'Your Custom Error Message';
END IF;
注SQLSTATE '45000'
は、「未処理のユーザー定義の例外条件」に相当します。デフォルトでは、これは1644
(同じ意味を持つ)というエラーコードを生成します。必要に応じて、他の条件コードまたはエラーコードをスローできることに注意してください(さらに、例外処理の詳細)。
この問題の詳細については、以下をチェックしてください。
https://dev.mysql.com/doc/refman/5.5/en/signal.html
MySQL関数内でエラーを発生させる方法
http://www.databasejournal.com/features/mysql/mysql-error-handling-using-the-signal-and-resignal-statements.html
補遺
私のこの投稿を再読していると、何か追加する必要があることに気付きました。MySQL v5.5より前は、例外のスローをエミュレートする方法がありました。それは正確には同じではありませんが、これは類似物でした:存在しないプロシージャを呼び出すことによってエラーを作成します。問題が何であったかを判別するための有用な手段を得るために、意味のある名前でプロシージャを呼び出します。エラーが発生すると、(実行コンテキストに応じて)エラーの行が表示されます。
例えば:
CALL AttemptedToInsertSomethingInvalid;
プロシージャを作成する場合、そのようなものに対して検証は行われないことに注意してください。したがって、コンパイルされた言語のようなものでは、そこにない関数を呼び出すことはできませんが、このようなスクリプトでは、実行時に単に失敗します。これがまさにこの場合に必要なことです!
IF tablename IS NOT NULL THEN
...;)