EXECUTE IMMEDIATE ステートメント
EXECUTE IMMEDIATE ステートメントは、文字ストリング形式のステートメントから実行可能形式の SQL ステートメントを準備し、その SQL ステートメントを実行します。
EXECUTE IMMEDIATE の機能は、 PREPARE ステートメントと EXECUTE ステートメントの基本的な機能の組み合わせです。 このステートメントは、 ホスト変数もパラメーター・マーカーも含まれていない SQL ステートメントを準備し実行する場合に使用することができます。
呼び出し
このステートメントは、アプリケーション・プログラムに組み込む方法のみ可能です。 これは、動的に作成できない実行可能ステートメントです。
許可
指定された SQL ステートメントに定義されているのと同じ許可規則が適用されます。
ステートメントの許可 ID は、DYNAMICRULES BIND オプションの影響を受けることがあります。
構文
説明
- 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
- SET COMPILATION ENVIRONMENT
- SET CURRENT DECFLOAT ROUNDING MODE
- SET CURRENT DEFAULT TRANSFORM GROUP
- SET CURRENT DEGREE
- SET CURRENT EXPLAIN MODE
- SET CURRENT EXPLAIN SNAPSHOT
- SET CURRENT FEDERATED ASYNCHRONY
- SET CURRENT IMPLICIT XMLPARSE OPTION
- SET CURRENT ISOLATION
- SET CURRENT LOCALE LC_MESSAGES
- 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 TEMPORAL BUSINESS_TIME
- SET CURRENT TEMPORAL SYSTEM_TIME
- SET ENCRYPTION PASSWORD
- SET EVENT MONITOR STATE (DYNAMICRULES の実行動作がパッケージに効力を持つ場合のみ)
- SET INTEGRITY
- SET PASSTHRU
- SET PATH
- SET ROLE (DYNAMICRULES の実行動作がパッケージに効力を持つ場合のみ)
- SET SCHEMA
- SET SERVER OPTION
- SET SESSION AUTHORIZATION
- SET SQL_CCFLAGS
- SET USAGE LIST STATE (DYNAMICRULES の実行動作がパッケージに効力を持つ場合のみ)
- SET 変数
- TRANSFER OWNERSHIP (DYNAMICRULES の実行動作がパッケージに効力を持つ場合のみ)
- TRUNCATE (DYNAMICRULES の実行動作がパッケージに効力を持つ場合のみ)
- UPDATE
ステートメント・ストリングには、 パラメーター・マーカーやホスト変数への参照を含めてはなりません。 また EXEC SQL で始まっていてはなりません。 ステートメント終止符を含めることはできません。ただし、コンパウンド SQL ステートメントは例外で、セミコロン (;) を使用してコンパウンド・ブロック内でステートメントを区切ることができます。コンパウンド SQL ステートメントは一部の CREATE および ALTER ステートメント内で使用されるので、これらのステートメントにもセミコロンを含めることができます。
EXECUTE IMMEDIATE ステートメントを実行すると、 指定したステートメント・ストリングの構文解析が行われ、エラーの有無が検査されます。 その SQL ステートメントが無効である場合それは実行されず、実行を妨げているエラー条件が SQLCA に報告されます。 SQL ステートメントが有効で、その実行の過程でエラーが発生した場合、 エラー条件が SQLCA に報告されます。
注
- ステートメントのキャッシュは、EXECUTE IMMEDIATE ステートメントの動作に影響を与えます。
例
if ( strcmp(accounts,"BIG") == 0 )
strcpy (qstring,"INSERT INTO WORK_TABLE SELECT *
FROM EMP_ACT WHERE ACTNO < 100");
else
strcpy (qstring,"INSERT INTO WORK_TABLE SELECT *
FROM EMP_ACT WHERE ACTNO >= 100");
.
.
.
EXEC SQL EXECUTE IMMEDIATE :qstring;