SQLDA ヘッダーのフィールドの説明

SQLDA は、ヘッダー構造の中の 4 つの変数と、それに続く一連の 5 つの変数からなる任意の数のオカレンス (これらは一括して SQLVAR という名前が付けられている) から構成されます。 OPEN、CALL、FETCH、および EXECUTE では、SQLVAR の各オカレンスで、それ ぞれ変数を 1 つずつ記述します。 PREPARE および DESCRIBE では、SQLVAR の各オカレンスで、結果表の列を記述します。

SQL INCLUDE ステートメントを使用することにより、以下のフィールド名が組み込まれます。

表 1. SQLDA ヘッダーのフィールドの説明
C の名前1
PL/I の名前
COBOL の名前
フィールド
データ・タイプ
DESCRIBE および PREPARE で使用する場合 (SQLN 以外は、データベース・マネージャーによってセットされる) FETCH、OPEN、CALL、または EXECUTE で使用する場合 (ユーザーがステートメントを実行する前にセットする)
sqldaid
SQLDAID
CHAR(8) ストレージ・ダンプのための「目印」として、「SQLDA」が入ります。

SQLDAID の 7 番目のバイトは、各列に複数の SQLVAR 項目が必要かどうかを判断するために使用できます。 詳しくは、必要な SQLVAR オカレンスの数の決定を参照してください。

7 番目のバイトの '2' は、各列に 2 つの SQLVAR 項目が割り振られたことを示します。

7 番目のバイトの '3' は、各列に 3 つの SQLVAR 項目が割り振られたことを示します。

7 番目のバイトの '4' は、各列に 4 つの SQLVAR 項目が割り振られたことを示します。

sqldabc
SQLDABC
INTEGER SQLDA の長さ。 SQLDA として割り振られた記憶域のサイズ (バイト数)。 SQLN に指定されているオカレンスが入るだけの記憶域を割り振る必要があります。 SQLDABC には、16+SQLN*(80) 以上の値をセットする必要があります (80 は SQLVAR のオカレンスの長さ)。 LOB または特殊タイプが指定された場合には、各パラメーター・マーカーごとに 2 つの SQLVAR 項目が必要です。
sqln
SQLN
SMALLINT データベース・マネージャーでは変更しません。 PREPARE または DESCRIBE ステートメントを実行する前に、ユーザー側でゼロ以上の値をセットしなければなりません。 この値は、結果内の列の数と同じか、それより大きい値にセットするか、複数の SQLVAR 項目セットが必要な場合には、結果内の列の数の倍数にセットする必要があります。 SQLVAR 配列のオカレンス数を指示します。 SQLDA に用意する SQLVAR 配列の合計オカレンス数。 SQLN には、ゼロ以上の値をセットしなければなりません。

LOB または特殊タイプが指定された場合には、各パラメーター・マーカーご とに 2 つの SQLVAR 項目が必要であり、SQLN はパラメーター・マーカー数 の 2 倍にセットしなければなりません。

sqld
SQLD
SMALLINT SQLVAR 配列の各オカレンスによって記述する列の数 (記述するステートメントが選択ステートメント、CALL、または VALUES INTO 以外の場合は、ゼロ)。 ステートメント実行中に使用される SQLVAR 項目の SQLDA 内オカレンス数。 SQLD には、ゼロ以上で SQLN 以下の値をセットしなければなりません。

必要な SQLVAR オカレンスの数の決定

必要な SQLVAR オカレンス数は、SQLDA に提供されたステートメントと、記述されている列またはパラメーターのデータ・タイプによって決まります。 詳細については、上記の表を参照してください。

SQLDAID の 7 番目のバイトは常に、結果セットに LOB または UDT が入っている場合に必要な SQLVAR のセット数に設定されます。

SQLD が十分な数の SQLVAR オカレンスにセットされない場合、

  • LOB および UDT が結果セットに入っていない場合は、SQLD は、すべてのセットに必要な SQLVAR オカレンスの合計数に設定されます。 LOB または UDT が結果セットに入っている場合は、SQLD は結果表内の列の数に設定され、SQLDAID の 7 番目のバイトは必要な SQLVAR 項目セットの数を表します。 必要な SQLVAR 項目の数は、SQLDAID の 7 番目のバイトの値を SQLD に掛けることによって常に計算できます。
  • 少なくとも基本 SQLVAR 項目用に十分な数の SQLVAR が指定されている場合、 警告 (SQLSTATE 01594) が戻されます。 この場合、基本 SQLVAR 項目は戻されますが、拡張 SQLVAR は戻されません。
  • 基本 SQLVAR 項目用にさえも十分な数の SQLVAR が指定されていない場合は、 警告 (SQLSTATE 01005) が戻されます。 SQLVAR 項目は返されません。2

表 2表 3、および 表 4 は、基本および拡張 SQLVAR 項目をマップする方法を示しています。 基本と拡張の両方の SQLVAR 項目を含む SQLDA の場合、基本 SQLVAR 項目は最初のブロック内にあり、その後に拡張 SQLVAR 項目のブロックが続き、さらに必要であれば、その後に第 2、第 3 の拡張 SQLVAR 項目のブロックが続きます。 各ブロックでの SQLVAR 項目のオカレンス数は、多数の拡張 SQLVAR 項目が未使用である可能性があっても、SQLD 内の値と同じになります。

表 2. USING NAMES、USING SYSTEM NAMES、USING LABELS または USING ANY の SQLVAR 配列の内容
LOB DISTINCT タイプ SQLDAID の 7 番目のバイト SQLN 最小値 最初のセット (基本) 2 番目のセット (拡張) 3 番目のセット (拡張) 4 番目のセット (拡張)
なし なし ブランク n 列名、システム列名、またはラベル 使用されません 使用されません 使用されません
あり なし 2 2n 列名、システム列名、またはラベル LOB 使用されません 使用されません
なし あり 2 2n 列名、システム列名、またはラベル 特殊タイプ 使用されません 使用されません
あり あり 2 2n 列名、システム列名、またはラベル LOB および特殊タイプ 使用されません 使用されません
表 3. USING BOTH の SQLVAR 配列の内容
LOB DISTINCT タイプ SQLDAID の 7 番目のバイト SQLN 最小値 最初のセット (基本) 2 番目のセット (拡張) 3 番目のセット (拡張) 4 番目のセット (拡張)
なし なし 2 2n 列名 ラベル 使用されません 使用されません
あり なし 2 2n 列名 LOB およびラベル 使用されません 使用されません
なし あり 3 3n 列名 特殊タイプ ラベル 使用されません
あり あり 3 3n 列名 LOB および特殊タイプ ラベル 使用されません
表 4. USING ALL の SQLVAR 配列の内容
LOB DISTINCT タイプ SQLDAID の 7 番目のバイト SQLN 最小値 最初のセット (基本) 2 番目のセット (拡張) 3 番目のセット (拡張) 4 番目のセット (拡張)
なし なし 3 3n システム列名 ラベル 列名 使用されません
あり なし 3 3n システム列名 LOB およびラベル 列名 使用されません
なし あり 4 4n システム列名 特殊タイプ ラベル 列名
あり あり 4 4n システム列名 LOB および特殊タイプ ラベル 列名
1 この欄では、小文字の名前は C の名前を示し、大文字の名前は COBOL、PL/I、または RPG の名前を示しています。
2 LOB または UDT が結果セットに入っていない場合、この警告が戻されるのは、標準オプションが指定されている場合のみです。 標準オプションについては、標準への準拠を参照してください。