Symfoware Server SQLビギナーズガイド - FUJITSU - |
目次 索引 |
第7章 アプリケーションの実行時に動的SQL文を実行する方法 | > 7.3 SQL文の条件を動的に変更して実行する |
SQL文の条件だけを動的に変更してデータ操作を行う場合は、動的パラメタ指定を指定します。入力する値をホスト変数に格納します。ホスト変数の値を設定するためには、動的パラメタ指定の情報をそのホスト変数の属性と一致させることが必要です。そこで、データベースからSQLDA構造体に動的パラメタ指定の情報を取り込んで、属性を変更し、値を設定します。SQLDA構造体の位置づけを以下に示します。
SQLDA構造体は、動的パラメタ指定に関する情報を持ちます。
SQLDA構造体は、項目記述子域“SQLVAR”およびSQLVARの最大要素数“SQLN”と有効要素数“SQLD”で構成されています。
項目記述子域SQLVARは、動的パラメタ指定の情報を格納する配列で構成されています。SQLDは、SQLDA構造体の動的パラメタ指定の数を示し、そのデータ型は2進の精度を持つ真数です。
SQLDA構造体の詳細については、“SQL文の準備とSQLDA構造体の操作”を参照してください。
USING記述子を使用して、動的パラメタ指定の値を設定する方法の順序を以下に示します。
“図:被準備文の動的パラメタ指定値の設定手順”で示したように、データベースからSQLDA構造体に動的パラメタ指定の情報を取り込んだり、SQLDA構造体に取り込まれた動的パラメタ指定の情報を取得するには、それぞれSQL文を使用します。SQLDA構造体を操作するSQL文とその機能について以下で説明します。
DESCRIBE文では、PREPARE文で準備された被準備文の動的パラメタ指定の情報をSQLDA構造体に取り込みます。このSQL文を“入力DESCRIBE文”といいます。
SQL文識別子STM1に対応する被準備文の動的パラメタ指定の情報を、SQLDA構造体に取り込む入力DESCRIBE文の例を以下に示します。
DESCRIBE INPUT STM1 USING SQL DESCRIPTOR :INSQLDA (1) (2) |
(1) SQL文識別子
(2) SQLDA構造体
SQL文識別子STM1に対する被準備文が以下の場合、SQLDA構造体変数の内容は次のようになります。
INSERT INTO 在庫管理.在庫表(製品番号, 製品名, 在庫数量) VALUES(?, ?, ?) (1) |
(1) 動的パラメタ指定
SQLD : 3
動的パラメタ指定の個数3が設定されます。
項目記述子域
製品番号,製品名,在庫数量の属性がそれぞれ設定されます。
製品番号: SMALLINT(NOT NULL制約あり)
製品名 : NATIONAL CHARACTER (10) (NOT NULL制約あり)
在庫数量: INTEGER(NOT NULL制約なし)
識別子 |
製品番号 |
製品名 |
在庫数量 |
---|---|---|---|
SQLTYPE |
5 |
11 |
4 |
SQLLEN |
2 |
20 |
4 |
SQLPRECISION.PRECISION |
15 |
0 |
31 |
SQLSCALE |
0 |
0 |
0 |
SQLNULLABLE |
0 |
0 |
1 |
SQLIND |
値は設定されない |
値は設定されない |
値は設定されない |
SQLNAME |
製品番号 (注) |
製品名 (注) |
在庫数量 (注) |
SQLPRECISION.INTERVAL.DATETIME_INTERVAL_PRECISION |
0 |
0 |
0 |
注) 長さはSQLNAMELに格納されます。
なお、ここでは、動的パラメタ指定の情報を持つSQLDA構造体を操作するSQL文のみを説明しています。これ以外のSQL文については、“SQL文の準備とSQLDA構造体の操作”を参照してください。
目次 索引 |