EXECUTE IMMEDIATE ステートメント (PL/SQL)

EXECUTE IMMEDIATE ステートメントは、SQL ステートメントの文字ストリング書式からステートメントの実行可能書式を準備してから、その SQL ステートメントを実行します。 EXECUTE IMMEDIATE は、PREPARE ステートメントと EXECUTE ステートメントの基本機能を兼ね備えます。

呼び出し方法

このステートメントは、PL/SQL コンテキスト内のみで指定できます。

許可

許可規則は、指定した SQL ステートメントに対して定義済みの規則です。

ステートメントの許可 ID は、DYNAMICRULES バインド・オプションの影響を受けることがあります。

構文

構文図を読む構文図をスキップするEXECUTE IMMEDIATEsql-expression INTO,variableBULK COLLECT INTO,array-variableUSING,INexpressionIN OUTvariableOUTvariable

説明

sql-expression
実行されるステートメント・ストリングを返す式。 この式は、文字ストリング・タイプを、最大ステートメント・サイズの 2 097 152 バイト未満で返す必要があります。 CLOB(2097152) には最大サイズのステートメントを含めることができますが、VARCHAR には含めることができないので注意してください。
ステートメント・ストリングは、次のいずれかの SQL ステートメントでなければなりません。
  • ALTER
  • CALL
  • COMMENT
  • COMMIT
  • コンパウンド SQL (コンパイル済み)
  • コンパウンド SQL (インライン化)
  • CREATE
  • DECLARE GLOBAL TEMPORARY TABLE
  • DELETE
  • DROP
  • EXPLAIN
  • FLUSH EVENT MONITOR
  • FLUSH PACKAGE CACHE
  • GRANT
  • INSERT
  • LOCK TABLE
  • MERGE
  • REFRESH TABLE
  • RELEASE SAVEPOINT
  • RENAME
  • REVOKE
  • ROLLBACK
  • SAVEPOINT
  • SELECT (EXECUTE IMMEDIATE ステートメントが BULK COLLECT INTO 節も指定した場合のみ)
  • SET COMPILATION ENVIRONMENT
  • SET CURRENT DECFLOAT ROUNDING MODE
  • SET CURRENT DEFAULT TRANSFORM GROUP
  • SET CURRENT DEGREE
  • SET CURRENT FEDERATED ASYNCHRONY
  • SET CURRENT EXPLAIN MODE
  • SET CURRENT EXPLAIN SNAPSHOT
  • SET CURRENT IMPLICIT XMLPARSE OPTION
  • SET CURRENT ISOLATION
  • SET CURRENT LOCALE LC_TIME
  • SET CURRENT LOCK TIMEOUT
  • SET CURRENT MAINTAINED TABLE TYPES FOR OPTIMIZATION
  • SET CURRENT MDC ROLLOUT MODE
  • SET CURRENT OPTIMIZATION PROFILE
  • SET CURRENT QUERY OPTIMIZATION
  • SET CURRENT REFRESH AGE
  • SET CURRENT SQL_CCFLAGS
  • SET ROLE (DYNAMICRULES 実行動作がパッケージに対して有効な場合のみ)
  • SET ENCRYPTION PASSWORD
  • SET EVENT MONITOR STATE (DYNAMICRULES 実行動作がパッケージに対して有効な場合のみ)
  • SET INTEGRITY
  • SET PASSTHRU
  • SET PATH
  • SET SCHEMA
  • SET SERVER OPTION
  • SET SESSION AUTHORIZATION
  • SET 変数
  • TRANSFER OWNERSHIP (DYNAMICRULES 実行動作がパッケージに対して有効な場合のみ)
  • TRUNCATE (DYNAMICRULES 実行動作がパッケージに対して有効な場合のみ)
  • UPDATE

ステートメント・ストリングにステートメント終止符を含めることはできません。ただし、コンパウンド SQL ステートメントは例外で、セミコロン (;) を含めることによりコンパウンド・ブロック内でステートメントを区切ることができます。 コンパウンド SQL ステートメントは一部の CREATE および ALTER ステートメント内で使用されるので、この場合にもセミコロンが含まれる可能性があります。

EXECUTE IMMEDIATE ステートメントの実行時に、指定されたステートメント・ストリングは構文解析され、エラーがないか検査されます。 SQL ステートメントが無効である場合は、実行されず、例外がスローされます。

INTO variable
対応するパラメーター・マーカーから出力値を受け取る変数の名前を指定します。
BULK COLLECT INTO array-variable
1 つ以上の変数を 1 つの配列データ・タイプとみなします。 添字を順に割り当てながら、結果セットの順序でそれぞれの配列の 1 つの要素へ、照会の各行を割り当てます。
  • 1 つの array-variable のみを指定した場合。
    • array-variable エレメントのデータ・タイプがレコード・タイプではない場合、SELECT リストには必ず 1 つの列が必要となり、列データ・タイプは配列エレメントのデータ・タイプに割り当て可能でなければなりません。
    • array-variable エレメントのデータ・タイプがレコード・タイプの場合、SELECT リストはレコード・タイプに割り当て可能でなければなりません。
  • 複数の配列変数を指定した場合。
    • array-variable エレメントのデータ・タイプは、レコード・タイプであってはなりません。
    • SELECT リストの各列に array-variable が必要になります。
    • SELECT リストの各列のデータ・タイプは、対応する array-variable の配列エレメントのデータ・タイプに割り当て可能でなければなりません。
array-variable のデータ・タイプが通常配列の場合、最大カーディナリティーは照会によって戻される行数以上である必要があります。

sql-expression が SELECT ステートメントの場合のみ、この節を使用できます。

USING
IN expression
入力パラメーター・マーカーに渡される値を指定します。 IN がデフォルトです。
IN OUT variable
対応するパラメーター・マーカーとの間で入力値を提供したり出力値を受け取ったりする変数の名前を指定します。 このオプションは、INTO 節または BULK COLLECT INTO 節が使用されている場合はサポートされません。
OUT variable
対応するパラメーター・マーカーから出力値を受け取る変数の名前を指定します。 このオプションは、INTO 節または BULK COLLECT INTO 節が使用されている場合はサポートされません。
評価される式または変数の数と順序は、sql-expression 内のパラメーター・マーカーの数と順序に一致し、互換性のあるタイプでなければなりません。

  • ステートメント・キャッシングは、EXECUTE IMMEDIATE ステートメントの動作に影響します。

CREATE OR REPLACE PROCEDURE proc1( p1 IN NUMBER, p2 IN OUT NUMBER, p3 OUT NUMBER )
IS
BEGIN
  p3 := p1 + 1;
  p2 := p2 + 1;
END;
/

EXECUTE IMMEDIATE 'BEGIN proc1( :1, :2, :3 ); END' USING IN p1 + 10, IN OUT p3,
  OUT p2;

EXECUTE IMMEDIATE 'BEGIN proc1( :1, :2, :3 ); END' INTO p3, p2 USING p1 + 10, p3;