Symfoware Server SQLビギナーズガイド - FUJITSU - |
目次 索引 |
第7章 アプリケーションの実行時に動的SQL文を実行する方法 | > 7.3 SQL文の条件を動的に変更して実行する |
SQL文の条件だけを動的に変更してデータ操作を行う場合は、動的パラメタ指定を指定します。入力する値をホスト変数に格納します。ホスト変数の値を設定するためには、動的パラメタ指定の情報をそのホスト変数の属性と一致させることが必要です。そこで、データベースからSQL記述子域に動的パラメタ指定の情報を取り込んで、属性を変更し、値を設定します。SQL記述子域の位置づけを以下に示します。
SQL記述子域は、識別子COUNTと0以上の項目記述子域(SQL記述子域の各要素)で構成されています。COUNTは、SQL記述子域の動的パラメタ指定の数を示し、そのデータ型は2進の精度を持つ真数です。以下の図では、SQL記述子域の動的パラメタ指定の数をnで表しています。
SQL記述子域の詳細については、“SQL文の準備とSQL記述子域の操作”を参照してください。
USING記述子を使用して、動的パラメタ指定の値を設定する方法の順序を以下に示します。
“図:被準備文の動的パラメタ指定値の設定手順”で示したように、データベースからSQL記述子域に動的パラメタ指定の情報を取り込んだり、SQL記述子域に取り込まれた動的パラメタ指定の情報を取得するには、それぞれSQL文を使用します。SQL記述子域を操作するSQL文とその機能について以下で説明します。
DESCRIBE文では、PREPARE文で準備された被準備文の動的パラメタ指定の情報をSQL記述子域に取り込みます。このSQL文を“入力DESCRIBE文”といいます。DESCRIBE文で指定した記述子名が動的OPEN文に指定されている場合、カーソルは閉じられた状態であることが必要です。
SQL文識別子STM1に対応する被準備文の動的パラメタ指定の情報を、SQL記述子域に取り込む入力DESCRIBE文の例を以下に示します。
DESCRIBE INPUT STM1 USING SQL DESCRIPTOR 'DESC1' (1) (2) |
(1) SQL文識別子
(2) 記述子名
SQL文識別子STM1に対する被準備文が以下の場合、SQL記述子域DESC1の内容は次のようになります。
INSERT INTO 在庫管理.在庫表(製品番号, 製品名, 在庫数量) VALUES(?, ?, ?) (1) |
(1) 動的パラメタ指定
COUNT : 3
動的パラメタ指定の個数3が設定されます。
項目記述子域
製品番号、製品名、在庫数量の属性がそれぞれ設定されます。
製品番号: SMALLINT(NOT NULL制約あり)
製品名 : NATIONAL CHARACTER (10) (NOT NULL制約あり)
在庫数量: INTEGER(NOT NULL制約なし)
識別子 |
製品番号 |
製品名 |
在庫数量 |
---|---|---|---|
TYPE |
5 |
1 |
4 |
LENGTH |
2 |
10 |
4 |
OCTET_LENGTH |
2 |
20 |
4 |
PRECISION |
15 |
0 |
31 |
SCALE |
0 |
0 |
0 |
NULLABLE |
0 |
0 |
1 |
INDICATOR |
値は設定されない |
値は設定されない |
値は設定されない |
DATA |
値は設定されない |
値は設定されない |
値は設定されない |
NAME |
製品番号 (注) |
製品名 (注) |
在庫数量 (注) |
CHARACTER_SET_NAME |
38バイトの空白 |
NCHAR (注) |
38バイトの空白 |
DATETIME_INTERVAL_CODE |
0 |
0 |
0 |
DATETIME_INTERVAL_PRECISION |
0 |
0 |
0 |
注) 38バイトに満たない場合は、残りの部分に空白が設定されます。
DESCRIPTOR取得文では、SQL記述子域に設定されている情報をホスト変数に取り出します。ホスト変数のデータ型は、取得識別子に対応するデータ型と一致していることが必要です。
動的パラメタ指定の個数を、ホスト変数varcountに取得する例を以下に示します。
GET DESCRIPTOR 'DESC1' :varcount = COUNT (1) (2) (3) |
(1) 記述子名
(2) 単純相手指定
(3) 取得識別子
SQL記述子域に設定されている動的パラメタ指定の内容を、それぞれホスト変数vartype、varleng、varoctetに取得する例を以下に示します。また、取得する項目記述子域の要素番号はvarwcountに設定されている値とします。
GET DESCRIPTOR 'DESC1' VALUE :varwcount :vartype = TYPE, (1) (2) (3) (4) :varleng = LENGTH, :varoctet = OCTET_LENGTH (3) (4) (3) (4) |
(1) 記述子名
(2) SQLVAR取得番号
(3) 単純相手指定
(4) 取得識別子
DESCRIPTOR設定文では、動的パラメタ指定のデータ型と値をSQL記述子域に設定します。定数またはホスト変数で指定します。ホスト変数のデータ型は、それぞれ設定識別子のデータ型と一致していることが必要です。また、DESCRIPTOR設定文で指定した記述子名が動的OPEN文に指定されている場合、カーソルは閉じられた状態であることが必要です。
SQL記述子域の動的パラメタ指定のデータ型を変更し、値を設定する例を以下に示します。ここでは、設定を行う値が格納されているホスト変数vardataのデータ型が、CHARACTER(11)と宣言されているとします。したがって、動的パラメタ指定のデータ型をCHARACTER(10)に変更します。設定を行う項目記述子域の要素番号はvarwcountに設定されている値とします。
SET DESCRIPTOR 'DESC1' VALUE :varwcount TYPE = 1, (1) (2) (3) (4) LENGTH = 10, OCTET_LENGTH = 10, DATA = :vardata (3) (4) (3) (4) (3) (4) |
(1) 記述子名
(2) SQLVAR設定番号
(3) 設定識別子
(4) 単純値指定
なお、ここでは、動的パラメタ指定の情報を持つSQL記述子域を操作するSQL文のみを説明しています。これ以外のSQL文については、“SQL文の準備とSQL記述子域の操作”を参照してください。
目次 索引 |