-
いいえ:複合ステートメントは、ストアドプログラムの本体内でのみ使用できます。
-
START TRANSACTION;
およびCOMMIT;
個別のステートメントです。ストアドプログラムの本体に複数のステートメントを含める場合は、それらのステートメントをBEGIN ... END
などのある種の複合ステートメントブロックで囲む必要があります。 (これは、ステートメントのブロックを中かっこで囲むのと似ています{ ... }
Cのような言語内)。そうは言っても、できた 単一ステートメントの
START TRANSACTION;
のみを含むストアドプログラムがある またはCOMMIT;
—このようなプログラムは、複合ステートメントブロックを必要とせず、それぞれ新しいトランザクションを開始するか、現在のトランザクションをコミットするだけです。複合ステートメントブロックが許可されていないストアドプログラムの外部では、
START TRANSACTION;
を発行できます。 およびCOMMIT;
必要に応じてステートメントを作成します。 -
LOOP
複合ステートメントブロックでもあり、ストアドプロシージャ内でのみ有効です。 必要ではありませんLOOP
を囲むBEGIN ... END
内のブロック 通常ですが、ブロックします(そうでない場合、必要なループの初期化を実行するのは困難です)。
ループ構造からテーブルにデータを挿入したい場合は、次のいずれかを行う必要があります。
-
LOOP
を使用するストアドプログラムを定義します; -
各反復でデータベースクエリを実行する外部プログラムでループを反復します。または
-
SQLが直接操作できるセットの観点からロジックを再定義します。