SQLDA (SQL 記述子域)
SQLDA は、SQL DESCRIBE ステートメントの実行に使用される変数の集まりであり、 PREPARE、 OPEN、 CALL、 FETCH、および EXECUTE ステートメントで、必要に応じて使用することができます。
SQLDA は、DESCRIBE または PREPARE ステートメントで使用し、ストレージ域1のアドレスによって変更し、その後で FETCH ステートメントで再度使用することができます。
SQLDA はすべての言語でサポートされますが、事前定義宣言が用意されているのは、C (および C++)、 COBOL、ILE RPG、PL/I、および REXX の場合だけです。 REXX の場合、SQLDA は他の言語の場合と多少異なります。REXX での SQLDA の使用方法について詳しくは、「組み込み SQL プログラミング」トピック集を参照してください。
SQLDA の情報の意味は、その用途によって異なります。
- SQLDA を DESCRIBE または PREPARE ステートメントで使用すると、SQLDA によって準備済み選択ステートメントに関する情報がアプリケーション・プログラムに提供されます。 結果表の各列は、SQLVAR オカレンスまたは関連 SQLVAR オカレンスのセット内に記述されます。
- OPEN、EXECUTE、CALL、および FETCH で使用すると、SQLDA によって、
入力データまたは出力データ用のストレージ域に関する情報がデータベース・マネージャーに提供されます。
各ストレージ域は SQLVAR に記述されます。
- CALL 以外のステートメントの OPEN および EXECUTE の場合、 それぞれの SQLVAR オカレンスまたは関連した SQLVAR オカレンスのセットは、 以前に準備された関連 SQL ステートメントにパラメーター・マーカーの代わりになる入力値を含めるのに使用するストレージ域を記述します。
- FETCH の場合、それぞれの SQLVAR オカレンスまたは関連した SQLVAR オカレンスのセットは、 結果表の行からの出力値を含めるのに使用するストレージ域を記述します。
- 準備済み CALL ステートメントの CALL および EXECUTE の場合、 それぞれの SQLVAR オカレンスまたは関連した SQLVAR オカレンスのセットで、 プロシージャー用の引数リストの引数に対応する 入力値または出力値 (またはその両方) を含めるのに使用するストレージ域を記述します。
SQLDA は、ヘッダー構造の中の 4 つの変数と、 それに続く基本 SQLVAR の任意の数のオカレンスから構成されます。 SQLDA が LOB または特殊タイプを記述する場合、 基本 SQLVAR の後に拡張 SQLVAR のオカレンスの同じ数が続きます。
- 基本 SQLVAR 項目
- 基本 SQLVAR 項目は、常に存在する項目です。 この項目のフィールドには、その列または変数に関する基本情報 (データ・タイプ・コード、長さ属性 (LOB の場合を除く)、列名 (またはラベル)、CCSID、変数アドレス、標識変数アドレスなど) が含まれます。
- 拡張 SQLVAR 項目
- 拡張 SQLVAR 項目は、結果に LOB または特殊タイプの列が含まれている場合に (各列ごとに) 必要となります。特殊タイプの場合、拡張 SQLVAR には特殊タイプ名が入ります。 LOB の場合、拡張 SQLVAR には、変数の長さ属性と、実際の長さを含むバッファーを指すポインターが入ります。ロケーターまたはファイル参照変数を使用して LOB を表す場合、拡張 SQLVAR は不要です。
拡張 SQLVAR 項目は、次の場合にも各列ごとに必要となります。
- USING BOTH が指定されている場合。これは、列名およびラベルが戻されることを示します。
- USING ALL が指定されている場合。これは、列名、ラベル、およびシステム列名が戻されることを示します。
LOB および特殊タイプ情報を戻す拡張 SQLVAR 内のフィールドはオーバーラップせず、LOB およびラベル情報を戻すフィールドもオーバーラップしません。 ラベル、LOB、および特殊タイプの組み合わせによっては、情報を戻すのに列ごとに複数の拡張 SQLVAR 項目が必要になる場合があります。必要な SQLVAR オカレンスの数の決定を参照してください。