[begin_label:] BEGIN
[statement_list]
END [end_label]
BEGIN ... END
構文は、ストアドプログラム (ストアドプロシージャーとストアドファンクション、トリガー、およびイベント) 内に指定できる複合ステートメントを記述するために使用されます。 複合ステートメントには、BEGIN
および END
キーワードで囲まれた複数のステートメントを含めることができます。statement_list
は、それぞれがセミコロン (;
) ステートメント区切り文字で終了する 1 つ以上のステートメントのリストを表します。 statement_list
自体がオプションであるため、空の複合ステートメント (BEGIN END
) は正当です。
BEGIN ... END
ブロックはネストできます。
複数のステートメントを使用するには、クライアントが ;
ステートメント区切り文字を含むステートメント文字列を送信できる必要があります。 mysql コマンド行クライアントでは、これは delimiter
コマンドで処理されます。 ステートメント終了の区切り文字 ;
を (たとえば、//
に) 変更すると、プログラム本体での ;
の使用が許可されます。 例については、セクション25.1「ストアドプログラムの定義」を参照してください。
BEGIN ... END
ブロックにはラベルを付けることができます。 セクション13.6.2「ステートメントラベル」を参照してください。
オプションの [NOT] ATOMIC
句はサポートされていません。 つまり、この命令ブロックの先頭でトランザクションセーブポイントは設定されず、このコンテキストで使用されている BEGIN
句は現在のトランザクションに影響を与えません。
すべてのストアドプログラム内で、パーサーは、BEGIN [WORK]
を BEGIN ... END
ブロックの開始として扱います。 このコンテキストでトランザクションを開始するには、代わりに START TRANSACTION
を使用します。