EXECUTE IMMEDIATE ステートメントは、以下のことを行います。
EXECUTE IMMEDIATE の機能は、 PREPARE ステートメントと EXECUTE ステートメントの基本的な機能の組み合わせです。 このステートメントは、 ホスト変数もパラメーター・マーカーも含まれていない SQL ステートメントを準備し実行する場合に使用することができます。
呼び出し
このステートメントは、アプリケーション・プログラムに組み込む方法のみ可能です。 これは、動的に準備できない実行可能ステートメントです。
許可
権限の規則は、EXECUTE IMMEDIATE ステートメントに指定する SQL ステートメントにより定義されます。
構文
>>-EXECUTE IMMEDIATE--host-variable----------------------------><
指定するホスト変数の値は、ステートメント・ストリングと呼ばれます。
ステートメント・ストリングは、以下のいずれかの SQL ステートメントでなければなりません。
ステートメント・ストリングには、 パラメーター・マーカーやホスト変数への参照を含めてはなりません。 また EXEC SQL で始まっていてはなりません。 ステートメント終止符を含めることはできません。 ただし、CREATE TRIGGER ステートメントと CREATE PROCEDURE ステートメントでは、 トリガーによって実行される SQL ステートメントを区切ったり、 SQL プロシージャーの本体で SQL ステートメントを区切るためにセミコロン (;) を使用することができます。
EXECUTE IMMEDIATE ステートメントを実行すると、 指定したステートメント・ストリングの構文解析が行われ、エラーの有無が検査されます。 その SQL ステートメントが無効である場合、 それは実行されず、実行を妨げているエラー条件が SQLCA に報告されます。 SQL ステートメントが有効で、その実行の過程でエラーが発生した場合、 エラー条件が SQLCA に報告されます。
注
例
C プログラム・ステートメントを使用して SQL ステートメントをホスト変数 qstring (char[80]) に入れ、 そのホスト変数 qstring に入れられた SQL ステートメントを作成および実行します。
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;