EXECUTE IMMEDIATE文は、動的SQL文を一度の操作で作成して実行します。 この文は、システム固有の動的SQLがほとんどの動的SQL文を処理する際に使用する手段です。
構文
execute_immediate_statement ::=

into_clause ::=

bulk_collect_into_clause ::=

using_clause ::=

キーワードとパラメータの説明
bind_argument
値が動的SQL文に渡される式(インバインド)か、または値が動的SQL文に戻される変数(アウトバインド)が格納されます。
この句は、dynamic_sql_stmtが複数の行を戻す場合にのみ使用され、戻される行を格納する1つ以上のコレクションを指定します。 この句では、dynamic_sql_stmtの各select_itemに、対応する型互換性のあるcollection_itemまたは:host_array_nameが必要です。
collection_name
dynamic_sql_stmtによって戻される行を格納する、宣言されたコレクションの名前。
dynamic_returning_clause
この句は、dynamic_sql_stmtにRETURNING INTO句が含まれている場合にのみ使用され、dynamic_sql_stmtによって影響を受ける行の列値を、個々の変数またはレコードのいずれかに戻します(行を選択しておく必要はありません)。 この句には、OUTバインド引数を含めることができます。 詳細は、「RETURNING INTO句」を参照してください。
dynamic_sql_stmt
SQL文を表す1つの文字列リテラル、文字列変数または文字列式です。 CHAR型、VARCHAR2型またはCLOB型である必要があります。
host_array_name
戻された行が格納される配列。 この配列は、PL/SQLホスト環境で宣言して、バインド引数として(コロン(:)接頭辞を付けて)PL/SQLに渡す必要があります。
IN、OUT、IN OUT
バインド引数のパラメータ・モード。 INバインド引数は、その値を動的SQL文に渡します。 OUTバインド引数は、動的SQL文によって戻される値を格納します。 IN OUT引数は、その初期値を動的SQL文に渡し、動的SQL文によって戻される値を格納します。 bind_argumentのデフォルト・パラメータ・モードはINです。
INTO
この句は、dynamic_sql_stmtが最大で1つの行を戻すことができるSELECT文である場合にのみ使用され、戻された行の列値が格納される変数またはレコードを指定します。 dynamic_sql_stmtの各select_itemに対して、この句は、対応する型互換性のあるdefine_variableまたは型互換性のあるrecordのいずれかを必要とします。
record_name
戻された行が格納されるユーザー定義のレコードまたは%ROWTYPEレコード。
この句は、dynamic_sql_stmtにプレースホルダが含まれる場合にのみ使用され、バインド引数のリストを指定します。
variable_name
dynamic_sql_stmtによって戻される行の列値を格納する定義変数の名前。
使用上の注意
RETURNING句を持つDML文の場合は、パラメータ・モードOUTを定義して指定しなくても、OUTバインド引数をRETURNING INTO句に入れることができます。 USING句とRETURNING INTO句の両方を使用する場合、USING句にはIN引数のみを含めることができます。
実行時に、バインド引数または定義変数によって、動的SQL文内の対応するプレースホルダが置き換えられます。 すべてのプレースホルダをUSING句内またはRETURNING INTO句内(あるいはその両方)のバインド引数、またはINTO句内の定義変数に関連付ける必要があります。
バインド行数の値をブール・リテラル(TRUE、FALSE、またはNULL)にすることはできません。 値NULLを動的SQL文に渡すには、「USING句でのNULL用の未初期化変数」の説明に従って、NULLを使用する未初期化変数を使用します。
動的SQL文は、バインド引数の新しい値を使用して繰り返し実行できます。 ただし、EXECUTE IMMEDIATEは実行のたびに動的文字列を準備するため、オーバーヘッドが発生します。
|
注意: 動的SQLを使用する場合は、セキュリティ・リスクのSQLインジェクションに注意してください。 SQLインジェクションの詳細は、「PL/SQLでのSQLインジェクションの回避」を参照してください。 |
関連トピック