EXECUTE IMMEDIATE ステートメント

EXECUTE IMMEDIATE は、PREPARE ステートメントと EXECUTE ステートメントの基本機能を兼ね備えます。 このステートメントを使用すると、ホスト変数もパラメーター・マーカーも含まない SQL ステートメントを準備して実行できます。

EXECUTE IMMEDIATE ステートメントは、次のような働きをします。

  • ストリング形式のステートメントから、実行可能形式の SQL ステートメントを準備する。
  • SQL ステートメントを実行する。
  • 実行可能形式を破棄する。

呼びかけ EXECUTE IMMEDIATE

このステートメントは、アプリケーション・プログラムに組み込む方法のみ可能です。 これは、動的に作成できない実行可能ステートメントです。 Java™では指定できません。

承認 EXECUTE IMMEDIATE

許可規則は、EXECUTE IMMEDIATE で指定する SQL ステートメントの 動的準備に対して定義されている規則となります。 例えば、EXECUTE IMMEDIATEを使用してINSERT文が実行された際に適用される承認ルールについては、INSERT文を参照してください。

構文 EXECUTE IMMEDIATE

構文図を読むビジュアルシンタックスダイアグラムをスキップする EXECUTE IMMEDIATE 変数文字列式

説明の対象: EXECUTE IMMEDIATE

変更の開始可変変更の終わり
変更の開始FL 500PL/I 以外の言語の場合、 変数を指定する必要があります。 これは、文字ストリング変数またはグラフィック・ストリング変数を宣言する際の規則に従って、アプリケーション・プログラム内で記述されている変数を示している必要があります。 ソース・ストリングの長さが 32KB を超える場合、variable は CLOB 変数または DBCLOB 変数でなければいけません。 2MB より大きい変数を宣言できますが、ソースの最大長は 2MB です。 ホスト変数に標識変数を指定してはなりません。 アセンブラー、C、COBOL、および PL/I の場合、ホスト変数は可変長ストリング変数でなければいけません。 C の場合、ホスト変数は NUL 終了ストリングであってはなりません。 SQL PL の場合、SQL 変数、SQL パラメーター、または遷移変数を使用できますが、値が NULL であってはなりません。変更の終わり
文字列式
string-expression は、ストリングを生ずる PL/I の式です。 string-expression の前にコロンを付けることはできません。 演算子または関数を含んで いる string-expression の中の変数の前には、コロンを付けないでください。 string-expression が指定された場合、その string-expression のためのプリコンパイラー生成の構造体は EBCDIC CCSID を使用し、通知メッセージが戻されます。

注釈 EXECUTE IMMEDIATE

ステートメント・ストリングに対する規則:

識別されたホスト変数または指定された ストリング式 の値は、 ステートメント・ストリングと呼ばれます。

このステートメント・ストリングは、以下のいずれかの SQL ステートメントでなければならず、SELECT ステートメントであってはなりません。
ステートメント ステートメント
  • ALLOCATE CURSOR
  • ALTER
  • ASSOCIATE LOCATORS
  • COMMENT
  • COMMIT
  • CREATE
  • DECLARE GLOBAL TEMPORARY TABLE
  • DELETE
  • DROP
  • EXPLAIN
  • FREE LOCATOR
  • GRANT
  • HOLD LOCATOR
  • INSERT
  • ラベル
  • LOCK TABLE
  • MERGE
  • REFRESH TABLE
  • RELEASE SAVEPOINT
  • RENAME
  • REVOKE
  • ROLLBACK
  • SET代入文
  • SAVEPOINT
  • 変更の開始SET CURRENT ACCELERATOR変更の終わり
  • SET CURRENT APPLICATION COMPATIBILITY
  • SET CURRENT DEGREE
  • SET CURRENT DECFLOAT ROUNDING MODE
  • SET CURRENT DEBUG MODE
  • SET CURRENT EXPLAIN MODE
  • SET CURRENT LOCALE LC_CTYPE
  • SET CURRENT MAINTAINED TABLE TYPES FOR OPTIMIZATION
  • SET CURRENT OPTIMIZATION HINT
  • SET CURRENT PRECISION
  • SET CURRENT QUERY ACCELERATION
  • SET CURRENT REFRESH AGE
  • SET CURRENT ROUTINE VERSION
  • SET CURRENT RULES
  • SET CURRENT SQLID
  • SET ENCRYPTION PASSWORD
  • SET PATH
  • SET SCHEMA
  • SET CURRENT TEMPORAL BUSINESS_TIME
  • SET CURRENT TEMPORAL SYSTEM_TIME
  • SET SESSION TIME ZONE
  • SIGNAL
  • 変更の開始TRANSFER OWNERSHIP変更の終わり
  • TRUNCATE
  • UPDATE

ステートメント文字列には、以下の属性のいずれも含まれていてはなりません

  • EXEC SQL で始める。
  • END-EXEC またはセミコロンで終了する。
  • グローバル変数以外の変数に対する参照を含む。
  • パラメーター・マーカーを含む。
  • 遷移表に対する参照を含む。
エラーとエラー処理:
EXECUTE IMMEDIATE ステートメントの実行時に、指定されたステートメント・ストリングは構文解析され、エラーがないか検査されます。 SQL ステートメントが無効な場合には実行されず、その実行を妨げたエラー状態が SQLCA に報告されます。 SQL ステートメントが有効で、その実行の過程でエラーが発生した場合、 エラー条件が SQLCA に報告されます。

Db2 準備されたSQL文の実行を停止することができます。その文が終了するまでにCPU時間がかかりすぎている場合。 停止した場合はエラーが発生しますが、 そのステートメントを出したアプリケーションが終了することにはなりません。このアプリケーションは、他の SQL ステートメントを出すことができます。

CURRENT EXPLAIN MODE 特殊レジスターの影響:
CURRENT EXPLAIN MODE 特殊レジスターを EXPLAIN に設定すると、SET ステートメント以外のステートメントは EXPLAIN 専用に準備されるので、実行可能ではありません。 準備されたステートメントを実行しようとすると、エラーが戻されます。 詳細は、 現在の説明モードの特別レジスタ特別レジスタを参照してください。
パフォーマンスの考慮事項:
同じ SQL ステートメントを 2 回以上実行する場合には、 EXECUTE IMMEDIATE ステートメントより、PREPARE ステートメント と EXECUTE ステートメントを使った方が効率的です。

EXECUTE IMMEDIATE

例 1
この PL/I の例では、EXECUTE IMMEDIATE文を使用してDELETE文を実行します。このDELETE文では、削除対象の行がPREDの値で指定される検索条件によって決定されます。
EXEC SQL EXECUTE IMMEDIATE 'DELETE FROM DSN8C10.DEPT
  WHERE' || PREDS;
例 2
Cを使用して、ホスト変数Qstring内のSQLステートメントを実行します。
EXEC SQL INCLUDE SQLCA;
void main ()
  {                                                                  
   EXEC SQL BEGIN DECLARE SECTION;
   char Qstring[100] =
     "INSERT INTO WORK_TABLE SELECT * FROM EMPPROJACT WHERE ACTNO >= 100";
   EXEC SQL END DECLARE SECTION; 
  .
  .
  . 
   EXEC SQL EXECUTE IMMEDIATE :Qstring;
   return; 
  }

: