動的 SQL 文を処理します。
構文:
>>--EXEC SQL---PREPARE---stmt_name---.-------------.----->
+-INTO :sqlda-+
>---FROM---:hvar---END-EXEC-----><
パラメーター:
stmt_name |
準備済みの文の名前。これは、後続の EXECUTE 文か OPEN 文、または前の DECLARE CURSOR 文 (あるいはその両方) で使用できます。 |
:sqlda |
データの取り込み先の出力 SQL 記述子領域 (SQLDA) データ構造。コロンを使用すると、他の埋め込み SQL 実装との互換性を確保できます。 |
:hvar |
SQL 文を含むホスト変数。 |
例:
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.
説明:
次の 2 つの方法のいずれかで準備された文を使用できます。
EXECUTE 文で準備済みの文を使用する場合は、結果を返す SQL 文を :hvar に含めることはできません。
シングルトンの SELECT 文 (SELECT INTO) は動的 SQL 文で使用できないため、この SELECT 文は準備できません。
PREPARE 文を使用する場合は、:hvar にある SQL 文にホスト変数または注釈を含めることができませんが、パラメーター マーカーを含めることはできます。また、SQL 文には、埋め込み SQL に対して排他的な SQL キーワードは含められません。
INTO :sqlda オプションは、DESCRIBE と PREPARE の機能をまとめたものです。そのため、次のサンプル コードは、
次のコードと同等です。
PREPARE 文の使用の詳細については、『データベース アクセス ガイド』を参照してください。