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