直ちに SQL 文を実行します。
構文:
>>--EXEC SQL--.-------------------.--EXECUTE IMMEDIATE-->
+--FOR :host_integer---+
>----:stmt_hvar----END-EXEC-<>
パラメーター:
:host_integer |
処理されるホスト配列要素の最大数を指定するホスト変数。PIC S9(4) COMP-5 または PIC S9(9) COMP-5 として宣言する必要があります。 |
:stmt_hvar |
文字列ホスト変数。 |
例:
EXEC SQL
DELETE FROM staff WHERE staff_id = 99
END-EXEC
* Put the required SQL statement in prep.
MOVE "insert into staff (staff_id, last_name, first_name ,age,
- "employment_date) VALUES (99, 'Lee', 'Phillip', 19, '1992-
- "01-02')" TO prep
* Note EXECUTE IMMEDIATE does not require the statement to be
* prepared
EXEC SQL
EXECUTE IMMEDIATE :prep
END-EXEC
* Check it worked...
IF SQLCODE = ZERO
DISPLAY 'Statement executed OK.'
ELSE
DISPLAY 'Error: Statement not executed.'
DISPLAY SQLERRMC
DISPLAY SQLERRML
EXEC SQL DISCONNECT ALL END-EXEC
STOP RUN
END-IF
* Run through the same procedure again, this time deleting the
* values just inserted
MOVE "delete from staff where staff_id = 99" TO prep
EXEC SQL
EXECUTE IMMEDIATE :prep
END-EXEC
IF SQLCODE = ZERO
DISPLAY 'Statement executed OK.'
ELSE
DISPLAY 'Error: Statement not executed.'
DISPLAY SQLERRMC
DISPLAY SQLERRML
EXEC SQL DISCONNECT ALL END-EXEC
STOP RUN
END-IF
説明:
EXECUTE IMMEDIATE が DECLARE CURSOR 文の一部である場合は、FOR 句を使用しないでください。
EXECUTE IMMEDIATE 文には、入力パラメーター マーカーまたはホスト変数を入れることはできません。また、結果を返すこともできません。よって、この文の結果は廃棄されます。さらに、この文には埋め込み SQL に対して排他的な SQL キーワードも含められません。
行が返される場合、SQLCODE が +1 に設定されます。
EXECUTE IMMEDIATE は、Microsoft SQL Server に固有の SET 文 (つまり、そのサーバーで実行することを意図した SET 文) に対して使用する必要があります。