インライン SQL PL

インライン SQL PL は SQL PL フィーチャーのサブセットであり、コンパウンド SQL (インライン化) ステートメントで使用することができます。

コンパウンド SQL (インライン化) ステートメントは、単独で実行したり、トリガー、SQL 関数、または SQL メソッドの本体のインプリメントに使用したりできます。 Db2® CLP が基本 SQL スクリプト言語のサポートを提供する対話モードの場合は、ここからコンパウンド SQL (インライン化) ステートメントを単独で実行できます。

インライン SQL PL が「インライン」と記述されるのは、 このロジックが、それを参照する SQL ステートメントに展開され、この SQL ステートメントを使って実行されるからです。

以下の SQL PL ステートメントは、インライン SQL PL ステートメントのセットの一部とみなされます。
  • 変数に関連したステートメント
    • DECLARE <variable>
    • DECLARE <condition>
    • SET ステートメント (代入文)
  • 条件ステートメント
    • IF
    • CASE 式
  • ループ・ステートメント
    • FOR
    • WHILE
  • 制御転送ステートメント
    • GOTO
    • ITERATE
    • LEAVE
    • RETURN
  • エラー管理ステートメント
    • SIGNAL
    • GET DIAGNOSTICS

SQL プロシージャーでサポートされるこれ以外の SQL PL ステートメントは、コンパウンド SQL (インライン化) ステートメントではサポートされません。 カーソルおよび条件ハンドラーはインライン SQL PL ではサポートされないため、RESIGNAL ステートメントもサポートされません。

インライン SQL PL ステートメントはコンパウンド SQL (インライン化) ステートメントで実行する必要があるため、PREPARE、EXECUTE、または EXECUTE IMMEDIATE ステートメントに対するサポートはありません。

また ATOMIC は、動的に準備または実行されるコンパウンド SQL (インライン化) ステートメント内で指定する必要があるため、すべてのメンバー・ステートメントを正常にコミットするか、またはまったくコミットしないかのどちらかでなければなりません。 それゆえ、COMMIT および ROLLBACK ステートメントはどちらもサポートされません。

LOOP および REPEAT ステートメントに関しては、WHILE ステートメントを使用することにより、同等のロジックをインプリメントすることができます。

インライン SQL PL を持つスタンドアロン・スクリプトは、コマンド行プロセッサー (CLP) スクリプト内で動的に準備または実行されるコンパウンド SQL (インライン化) ステートメントの実行、または CLP プロンプトからの直接の実行から成ります。 動的に準備または実行されるコンパウンド SQL (インライン化) ステートメントはキーワード BEGIN と END によってバインドされます。このステートメントはデフォルト以外の終了文字で終了しなければなりません。 これには SQL PL およびそれ以外の SQL ステートメントを含めることができます。

インライン SQL PL ステートメントは、個別にコンパイルされるのではなく、それを参照する SQL ステートメント内に展開されるものなので、プロシージャー・ロジックを SQL プロシージャー内の SQL PL でインプリメントするのか、関数、トリガー、または動的に準備または実行されるコンパウンド SQL (コンパイル済み) ステートメント内のインライン SQL PL によってインプリメントするのかを計画するときには、パフォーマンスに関する考慮事項についていくらか検討する必要があります。