>>-EXEC SQL-----.-------------------.------EXECUTE------> +--FOR :row_count---+ >-prepared_stmt_name-.--------------------------------.-> +-USING DESCRIPTOR :sqlda_struct-+ | +- , -+ | | V | | +-USING :hvar--------------------+ >-----END-EXEC-----<>
:row_count | 整数型のホスト変数を指定します。結果およびパラメータのホスト変数がすべて同じサイズの配列で、 すべての要素を使用するわけではない場合は、使用する行数を指定します。EXECUTE が DECLARE CURSOR 文の一部である場合は、FOR 句を使用することはできません。 |
prepared_stmt_name | 前に準備された SQL 文を指定します。 |
:sqlda_struct | 入力値の記述を含む、前に宣言された SQLDA データ構造を指定するホスト変数を指定します。その他の埋め込み SQL 実装との互換性を保つためにコロンを使用できます。 |
:hvar | 1 つまたは複数の入力ホスト変数を指定します。 |
EXECUTE 文により、動的 SQL 文が処理されます。パラメータマーカがある場合にはそれを値に置き換えてから、指定した準備された SQL 文が実行されます。(準備された文は、PREPARE 文を使って作成します。) 結果を返さない文だけが許可されます。
準備された文にパラメータマーカが入っている場合は、EXECUTE 文には、ホスト変数と同数の USING :hvar オプション、またはアプリケーションによってすでに書き込まれた SQLDA データ構造を示す USING DESCRIPTOR :sqlda_struct オプションを含める必要があります。
準備された文のパラメータマーカの数は、sqldata 項目の数 (USING DESCRIPTOR :sqlda) またはホスト変数 (USING :hvar) と一致している必要があります。
* Store statement to be dynamically executed... MOVE "INSERT INTO staff VALUES(?,?,?,?,?)" TO stmtbuf. * Ensure attempt is not made to insert an existing record EXEC SQL DELETE FROM staff WHERE staff_id = 99 END-EXEC * Prepare the statement EXEC SQL PREPARE st FROM :stmtbuf END-EXEC. MOVE 99 TO staff-id MOVE 'Lee' TO last-name MOVE 'Phil' TO first-name MOVE 19 TO age MOVE '1997-01-01' TO employment-date * Execute the statement with current values. EXEC SQL EXECUTE st USING :staff-id, :last-name ,:first-name, :age, :employment-date END-EXEC IF SQLCODE = ZERO DISPLAY 'Statement executed.' ELSE DISPLAY 'Error: Could not execute statement.' DISPLAY SQLERRMC DISPLAY SQLERRML EXEC SQL DISCONNECT ALL END-EXEC STOP RUN END-IF * Finally, remove the entry EXEC SQL DELETE FROM staff where staff_id = 99 END-EXEC IF SQLCODE = ZERO DISPLAY 'Values deleted.' ELSE DISPLAY 'Error: Could not delete inserted values.' DISPLAY SQLERRMC DISPLAY SQLERRML EXEC SQL DISCONNECT ALL END-EXEC STOP RUN END-IF