SQLDA ヘッダーのフィールドの説明
SQLDA は、ヘッダー構造の中の 4 つの変数と、それに続く一連の 5 つの変数からなる任意の数のオカレンス (これらは一括して SQLVAR という名前が付けられている) から構成されます。 OPEN、CALL、FETCH、および EXECUTE では、SQLVAR の各オカレンスで、それ ぞれ変数を 1 つずつ記述します。 PREPARE および DESCRIBE では、SQLVAR の各オカレンスで、結果表の列を記述します。
SQL INCLUDE ステートメントを使用することにより、以下のフィールド名が組み込まれます。
フィールド
データ・タイプ |
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 内の値と同じになります。
LOB | DISTINCT タイプ | SQLDAID の 7 番目のバイト | SQLN 最小値 | 最初のセット (基本) | 2 番目のセット (拡張) | 3 番目のセット (拡張) | 4 番目のセット (拡張) |
---|---|---|---|---|---|---|---|
なし | なし | ブランク | n | 列名、システム列名、またはラベル | 使用されません | 使用されません | 使用されません |
あり | なし | 2 | 2n | 列名、システム列名、またはラベル | LOB | 使用されません | 使用されません |
なし | あり | 2 | 2n | 列名、システム列名、またはラベル | 特殊タイプ | 使用されません | 使用されません |
あり | あり | 2 | 2n | 列名、システム列名、またはラベル | LOB および特殊タイプ | 使用されません | 使用されません |
LOB | DISTINCT タイプ | SQLDAID の 7 番目のバイト | SQLN 最小値 | 最初のセット (基本) | 2 番目のセット (拡張) | 3 番目のセット (拡張) | 4 番目のセット (拡張) |
---|---|---|---|---|---|---|---|
なし | なし | 2 | 2n | 列名 | ラベル | 使用されません | 使用されません |
あり | なし | 2 | 2n | 列名 | LOB およびラベル | 使用されません | 使用されません |
なし | あり | 3 | 3n | 列名 | 特殊タイプ | ラベル | 使用されません |
あり | あり | 3 | 3n | 列名 | LOB および特殊タイプ | ラベル | 使用されません |
LOB | DISTINCT タイプ | SQLDAID の 7 番目のバイト | SQLN 最小値 | 最初のセット (基本) | 2 番目のセット (拡張) | 3 番目のセット (拡張) | 4 番目のセット (拡張) |
---|---|---|---|---|---|---|---|
なし | なし | 3 | 3n | システム列名 | ラベル | 列名 | 使用されません |
あり | なし | 3 | 3n | システム列名 | LOB およびラベル | 列名 | 使用されません |
なし | あり | 4 | 4n | システム列名 | 特殊タイプ | ラベル | 列名 |
あり | あり | 4 | 4n | システム列名 | LOB および特殊タイプ | ラベル | 列名 |