>>--EXEC SQL---PREPARE---stmt_name---.-------------.-----> +-INTO :sqlda-+ >---FROM---:hvar---END-EXEC-----><
stmt_name | 準備された文の名前。 これは、以後の EXECUTE または OPEN 文または前の DECLARE CURSOR 文 (またはその両方) で使用できます。 |
:sqlda | ポピュレート対象の出力 SQL 記述子領域 (SQLDA) データ構造体。 コロンを使用して、その他の埋め込み SQL 実装との互換性を保つこともできます。 |
:hvar | SQL 文を含むホスト変数。 |
PREPARE 文では、動的 SQL 文を処理します。
次のどちらかの方法で PREPARE 文で定義した文を使用できます。
PREPARE 文で定義した文を EXECUTE 文で使用する場合は、結果を返す SQL 文を :hvar に指定することはできません。
シングルトンの SELECT 文 (SELECT INTO) は動的 SQL 文で使用できないため、この SELECT 文は準備できません。
PREPARE 文を使用する場合は、:hvar にある SQL 文にホスト変数または注釈を含めることができませんが、パラメータマーカーを含めることはできます。 さらに、この文には、埋め込み SQL 専用の SQL キーワードを指定することもできません。
INTO :sqlda オプションは、DESCRIBE と PREPARE の機能をまとめたものです。したがって、次のサンプルコードは、
EXEC SQL PREPARE stmt1 INTO :sqlda FROM :stmt-buf END-EXEC
次のコードと同じです。
EXEC SQL PREPARE stmt1 FROM :stmt-buf END-EXEC EXEC SQL DESCRIBE stmt1 INTO :sqlda END-EXEC
PREPARE 文の使用の詳細については、次のオンラインマニュアルを参照してください。
PROGRAM-ID. progname. WORKING-STORAGE SECTION. EXEC SQL INCLUDE SQLCA END-EXEC EXEC SQL BEGIN DECLARE SECTION END-EXEC 01 prep PIC X(80). 01 nme PIC X(20). 01 car PIC X(20). 01 n60 PIC x(5). EXEC SQL END DECLARE SECTION END-EXEC. PROCEDURE DIVISION. EXEC SQL CONNECT TO 'srv1' USER 'sa' END-EXEC IF SQLCODE NOT = ZERO DISPLAY 'Error: Could not connect to database.' DISPLAY SQLERRMC DISPLAY SQLERRMC STOP RUN END-IF * Ensure attempt is not made to recreate an existing table... EXEC SQL DROP TABLE mf_table END-EXEC * Create a table... EXEC SQL CREATE TABLE mf_table (owner char(20) ,car_col char(20) ,nought_to_60 char(5)) END-EXEC IF SQLCODE NOT = ZERO DISPLAY 'Error: Could not create table' DISPLAY SQLERRMC DISPLAY SQLERRML EXEC SQL DISCONNECT CURRENT END-EXEC STOP RUN END-IF * Insert an SQL statement into host variable prep... MOVE "insert into mf_table values(?,?,?)" TO prep * Prepare the statement... EXEC SQL PREPARE prep_stat FROM :prep END-EXEC IF SQLCODE NOT = ZERO DISPLAY 'Error: Could not prepare statement' DISPLAY SQLERRMC DISPLAY SQLERRML EXEC SQL DISCONNECT CURRENT END-EXEC STOP RUN END-IF MOVE "Owner" TO nme MOVE "Lamborghini" TO car MOVE "4.9" TO n60 * Execute the prepared statement using the above host variables... EXEC SQL EXECUTE prep_stat USING :nme, :car, :n60 END-EXEC IF SQLCODE NOT = ZERO DISPLAY 'Error: Could not execute prepared statement.' DISPLAY SQLERRMC DISPLAY SQLERRML EXEC SQL DISCONNECT CURRENT END-EXEC STOP RUN END-IF * Finally, drop the now unwanted table... EXEC SQL DROP TABLE mf_table END-EXEC IF SQLCODE NOT = ZERO DISPLAY 'Error: Could not drop table.' DISPLAY SQLERRMC DISPLAY SQLERRML EXEC SQL DISCONNECT CURRENT END-EXEC STOP RUN END-IF DISPLAY 'All statements executed.' EXEC SQL DISCONNECT CURRENT END-EXEC STOP RUN.