>>--EXEC SQL--.-------------------.--EXECUTE IMMEDIATE--> +--FOR :row_count---+ >----:stmt_hvar----END-EXEC-<>
:row_count | 整数型のホスト変数を指定します。結果およびパラメータのホスト変数がすべて同じサイズの配列で、 すべての要素を使用するわけではない場合は、使用する行数を指定します。EXECUTE IMMEDIATE が DECLARE CURSOR 文の一部である場合は、FOR 句を使用することはできません。 |
:stmt_hvar | 文字列ホスト変数を指定します。 |
EXECUTE IMMEDIATE 文には、入力パラメータマーカまたはホスト変数を入れることはできません。また、結果を返すこともできません。 よって、この文の結果は廃棄されます。さらに、この文には埋め込み SQL に対して排他的な SQL キーワードを入れることもできません。
行が返される場合、SQLCODE が +1 に設定されます。
Microsoft SQL Server に固有の SET 文に対して、EXECUTE IMMEDIATE を使用する必要があります (つまり、そのサーバで実行する目的で使用されます)。
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