ヘッダーをスキップ
Oracle Database PL/SQL言語リファレンス
11g リリース1(11.1)
E05670-03
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

EXECUTE IMMEDIATE文

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

構文

execute_immediate_statement ::=

execute_immediate_statement
execute_immediate_statement.gifの説明

into_clause ::=

into_clause
into_clause.gifの説明

bulk_collect_into_clause ::=

bulk_collect_into_clause
bulk_collect_into_clause.gifの説明

using_clause ::=

using_clause
using_clause.gifの説明

キーワードとパラメータの説明

bind_argument

値が動的SQL文に渡される式(インバインド)か、または値が動的SQL文に戻される変数(アウトバインド)が格納されます。

BULK COLLECT INTO

この句は、dynamic_sql_stmtが複数の行を戻す場合にのみ使用され、戻される行を格納する1つ以上のコレクションを指定します。 この句では、dynamic_sql_stmtの各select_itemに、対応する型互換性のあるcollection_itemまたは:host_array_nameが必要です。

collection_name

dynamic_sql_stmtによって戻される行を格納する、宣言されたコレクションの名前。

dynamic_returning_clause

この句は、dynamic_sql_stmtRETURNING 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レコード。

USING

この句は、dynamic_sql_stmtにプレースホルダが含まれる場合にのみ使用され、バインド引数のリストを指定します。

variable_name

dynamic_sql_stmtによって戻される行の列値を格納する定義変数の名前。

使用上の注意

RETURNING句を持つDML文の場合は、パラメータ・モードOUTを定義して指定しなくても、OUTバインド引数をRETURNING INTO句に入れることができます。 USING句とRETURNING INTO句の両方を使用する場合、USING句にはIN引数のみを含めることができます。

実行時に、バインド引数または定義変数によって、動的SQL文内の対応するプレースホルダが置き換えられます。 すべてのプレースホルダをUSING句内またはRETURNING INTO句内(あるいはその両方)のバインド引数、またはINTO句内の定義変数に関連付ける必要があります。

バインド行数の値をブール・リテラル(TRUEFALSE、またはNULL)にすることはできません。 値NULLを動的SQL文に渡すには、「USING句でのNULL用の未初期化変数」の説明に従って、NULLを使用する未初期化変数を使用します。

動的SQL文は、バインド引数の新しい値を使用して繰り返し実行できます。 ただし、EXECUTE IMMEDIATEは実行のたびに動的文字列を準備するため、オーバーヘッドが発生します。


注意:

動的SQLを使用する場合は、セキュリティ・リスクのSQLインジェクションに注意してください。 SQLインジェクションの詳細は、「PL/SQLでのSQLインジェクションの回避」を参照してください。

関連トピック