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 オカレンスの数の決定を参照してください。

1 ストレージ域は、プログラムで定義された変数 (ホスト変数のこともある) 用のストレージの場合と、アプリケーションによって明示的に割り振られたストレージの 1 領域の場合があります。