EXECUTE IMMEDIATE ステートメント (PL/SQL)
EXECUTE IMMEDIATE ステートメントは、SQL ステートメントの文字ストリング書式からステートメントの実行可能書式を準備してから、その SQL ステートメントを実行します。 EXECUTE IMMEDIATE は、PREPARE ステートメントと EXECUTE ステートメントの基本機能を兼ね備えます。
呼び出し方法
このステートメントは、PL/SQL コンテキスト内のみで指定できます。
許可
許可規則は、指定した SQL ステートメントに対して定義済みの規則です。
ステートメントの許可 ID は、DYNAMICRULES バインド・オプションの影響を受けることがあります。
構文
説明
- 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 の配列エレメントのデータ・タイプに割り当て可能でなければなりません。
sql-expression が SELECT ステートメントの場合のみ、この節を使用できます。
- 1 つの array-variable のみを指定した場合。
- USING
- IN expression
- 入力パラメーター・マーカーに渡される値を指定します。 IN がデフォルトです。
- IN OUT variable
- 対応するパラメーター・マーカーとの間で入力値を提供したり出力値を受け取ったりする変数の名前を指定します。
このオプションは、
INTO節またはBULK COLLECT INTO節が使用されている場合はサポートされません。 - OUT variable
- 対応するパラメーター・マーカーから出力値を受け取る変数の名前を指定します。 このオプションは、
INTO節またはBULK COLLECT INTO節が使用されている場合はサポートされません。
注
- ステートメント・キャッシングは、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;