EXECUTE
IMMEDIATE
文は、動的SQL文を一度の操作で作成して実行します。
システム固有の動的SQLでは、EXECUTE
IMMEDIATE
文を使用してほとんどの動的SQL文を処理します。
注意:
動的SQLを使用する場合は、セキュリティ・リスクのSQLインジェクションに注意してください。SQLインジェクションの詳細は、「SQLインジェクション」を参照してください。
ここでのトピック
構文
execute_immediate_statement ::=
参照:
using_clause ::=
セマンティクス
execute_immediate_statement
dynamic_sql_stmt
SQL文を表す文字列リテラル、文字列変数または文字列式です。その型は、CHAR
型、VARCHAR2
型またはCLOB
型である必要があります。
注意:
dynamic_sql_statement
がSELECT
文の場合、into_clause
とbulk_collect_into_clause
の両方を省略すると、execute_immediate_statement
は実行されません。
たとえば、次の文では順序を増分しません。
EXECUTE IMMEDIATE 'SELECT S.NEXTVAL FROM DUAL'
into_clause
文によって戻される列値を格納する変数またはレコードを指定します。この句の詳細は、「RETURNING INTO句」を参照してください。
into_clauseの制限
dynamic_sql_stmt
が単一の行を返す場合にのみ使用します。
bulk_collect_into_clause
文によって戻される行を格納する1つ以上のコレクションを指定します。この句の詳細は、「RETURNING INTO句」を参照してください。
bulk_collect_into_clauseの制限
dynamic_sql_stmt
が複数の行を返すことができる場合にのみ使用します。
dynamic_returning_clause
動的SQL文によって影響を受ける行の列値を個々の変数またはレコードのいずれかに戻します。この句の詳細は、「RETURNING INTO句」を参照してください。
dynamic_returning_clauseの制限
dynamic_sql_stmt
がRETURNING
INTO
句を持つ場合にのみ使用します。
using_clause
位置表記法を使用して、バインド変数を指定します。
注意:
動的SQL文
内でプレースホルダ名を繰り返す場合は、プレースホルダをバインド変数に関連付ける方法が動的SQL文の種類によって異なるということに注意してください。詳細は、「動的SQL文内でのプレースホルダ名の繰返し」を参照してください。
using_clauseの制限
dynamic_sql_stmt
にバインド変数用のプレースホルダが含まれている場合にのみ使用します。
dynamic_sql_stmt
にRETURNING
INTO
句(static_returning_clause
)がある場合は、using_clause
にはIN
バインド変数のみを含めることができます。定義上、RETURNING
INTO
句のバインド変数はOUT
バインド変数です。
IN、OUT、IN OUT
バインド変数のパラメータ・モード。IN
バインド変数は、その値をdynamic_sql_stmt
に渡します。OUT
バインド変数は、dynamic_sql_stmt
によって戻される値を格納します。IN
OUT
バインド変数は、その初期値をdynamic_sql_stmt
に渡し、dynamic_sql_stmt
によって戻される値を格納します。デフォルト: IN
。
RETURNING
句を持つDML文の場合は、常にOUT
であるパラメータ・モードを指定しなくても、OUT
バインド変数をRETURNING
INTO
句に入れることができます。
bind_argument
実行時に、dynamic_sql_stmt
内の対応するプレースホルダのかわりに置き換えられる値を持つ式。
dynamic_sql_stmt
内のすべてのプレースホルダをUSING
句内またはRETURNING
INTO
句内(あるいはその両方)のbind_argument
、またはINTO
句内の定義変数に関連付ける必要があります。
dynamic_sql_stmt
は、バインド変数の異なる値を使用して繰り返し実行できます。ただし、EXECUTE
IMMEDIATE
は実行のたびに動的文字列を準備するため、オーバーヘッドが発生します。
注意:
バインド変数はどのような順序でも評価できます。プログラムにより評価の順序が決定される場合は、プログラムで決定が行われる時点で動作は定義されません。
bind_argumentの制限
bind_argument
に、文字列で索引付けされている連想配列は使用できません。
bind_argument
に、予約語NULL
は使用できません。
値NULL
を動的SQL文に渡すには、例7-7で示すように、NULL
を使用する場所に未初期化変数を使用します。