SQLDA は、4 つの変数と、 その後に SQLVAR と総称して呼ばれる変数の任意の数のオカレンスによって構成されています。 OPEN、FETCH、 EXECUTE、および CALL では、 SQLVAR の各オカレンスによってホスト変数が記述されます。 DESCRIBE と PREPARE では、 SQLVAR の各オカレンスによって結果表の列が記述されます。 SQLVAR の項目には、次の 2 つのタイプがあります。
SQLDA に上記 2 つのタイプの項目が両方とも含まれる場合、 基本 SQLVAR は副次 SQLVAR のブロックの前のブロックに入れられます。 それぞれの場合において、 項目の数は SQLD の値で示されます (副次 SQLVAR 項目の多くは使用されない場合があります)。
DESCRIBE によって SQLVAR 項目が設定される環境については、 SQLDA に対する DESCRIBE の効果に示されています。
C での名前 | SQL データ・タイプ | DESCRIBE および PREPARE を使用する場合 (SQLN を除き、データベース・マネージャーが設定) | FETCH、OPEN、EXECUTE、および CALL で使用する場合 (ステートメントの実行前にアプリケーションにより設定) |
---|---|---|---|
sqldaid | CHAR(8) | このフィールドの 7 番目のバイトは、SQLDOUBLED という名前のフラグ・バイトです。 データベース・マネージャーは、それぞれの列に対して 2 つの SQLVAR 項目が 作成された場合は SQLDOUBLED を文字 '2' に設定し、 その他の場合はブランク (ASCII では X'20'、 EBCDIC では X'40') に設定します。 SQLDOUBLED がいつ設定されるかについては、 SQLDA に対する DESCRIBE の効果を参照してください。 | このフィールドの 7 番目のバイトは、SQLVAR の数が 2 倍になった場合に使用されます。
これは SQLDOUBLED という名前のフィールドです。
記述されるホスト変数が構造タイプ、BLOB、CLOB、または DBCLOB の場合、
この 7 番目のバイトは文字 '2' に設定され、
それ以外の場合は任意の文字に設定できます (ブランクの使用をお勧めします)。
CALL ステートメントを使用し、 1 つまたは複数の SQLVAR でデータ・フィールドを FOR BIT DATA として定義する場合には、 6 番目のバイトを '+' の文字に、 それ以外の場合は任意の文字に設定できます (ブランクの使用を勧めします)。 |
sqldabc | INTEGER | 32 ビットの場合、SQLDA の長さ = SQLN*44+16。 64 ビットの場合、SQLDA の長さ = SQLN*56+16。 | 32 ビットの場合、SQLDA の長さ >= SQLN*44+16。 64 ビットの場合、SQLDA の長さ >= SQLN*56+16。 |
sqln | SMALLINT | データベース・マネージャーはこれを変更しません。 DESCRIBE ステートメントを実行する前に、 ゼロまたはゼロより大きい値を設定する必要があります。 これは、SQLVAR のオカレンスの合計数を示します。 | SQLDA の SQLVAR のオカレンスの合計。 SQLN には、ゼロまたはゼロより大きい値を設定する必要があります。 |
sqld | SMALLINT | データベース・マネージャーによって、 結果表の列の数 (記述するステートメントが選択ステートメントでない場合はゼロ) に設定されます。 | SQLVAR のオカレンスにより記述されるホスト変数の数 |
資料名 | データ・タイプ | DESCRIBE および PREPARE で使用する場合 | FETCH、OPEN、EXECUTE、および CALL で使用する場合 |
---|---|---|---|
sqltype | SMALLINT | 列のデータ・タイプと、その列がヌル値可能かどうかを示します。
表 39 は、
許される値とその意味をリストしています。
特殊タイプまたは参照タイプの場合は、 その基本タイプのデータ・タイプがこのフィールドに入れられます。 構造タイプの場合は、 そのタイプの変換グループ (CURRENT DEFAULT TRANSFORM GROUP 特殊レジスターに基づく) の FROM SQL 変換関数が入れられます。 基本 SQLVAR には、 それがユーザー定義タイプまたは参照タイプの記述の一部であるかどうかを示す標識はありません。 | ホスト変数の場合と同じ。 日付 / 時刻の値のホスト変数は、文字ストリング変数でなければなりません。 FETCH の場合、日付 / 時刻のタイプ・コードは、固定長文字ストリングを意味します。 sqltype が偶数値の場合、sqlind フィールドは無視されます。 |
sqllen | SMALLINT | 列の長さ属性。
日付 / 時刻の列の場合は、値のストリング表記の長さ。
表 39 を参照してください。
ラージ・オブジェクト・ストリングの場合、この値は 0 に設定されます。 その長さ属性が 2 バイト整数に入る小さいものであっても、設定値はやはり 0 になります。 | ホスト変数の長さ属性。
表 39 を参照してください。
CLOB、DBCLOB、および BLOB の列の場合、 データベース・マネージャーはこの値を無視します。 代わりに、副次 SQLVAR の len.sqllonglen フィールドが使用されます。 |
sqldata | ポインター | 文字ストリング SQLVAR の場合、FOR BIT DATA 属性で列を定義すると、sqldata は 0 になります。
列に FOR BIT DATA 属性が指定されていない場合、値はデータのエンコードによって異なります。
1 バイト SBCS エンコード・データの場合、sqldata はその SBCS コード・ページになります。
混合 DBCS エンコード・データの場合は、
sqldata は、複合 DBCS コード・ページに関連付けられた SBCS コード・ページになります。
日本語または中国語 (繁体字) EUC エンコード・データの場合には、
sqldata は複合 EUC コード・ページになります。
他のすべてのタイプの列の場合、sqldata は未定義です。 | ホスト変数のアドレスを含みます (取り出したデータを保管する場所)。 |
sqlind | ポインター | 文字ストリング SQLVAR の場合、sqlind は 0 になります。
ただし、sqlind が複合 DBCS コード・ページに関連付けられた DBCS コード・ページの場合の、
混合 DBCS エンコード・データは例外です。
他のすべてのタイプの列の場合、sqlind は未定義です。 | 関連する標識変数があれば、そのアドレスが入ります。 それ以外の場合は、使用されません。 sqltype が偶数値の場合、sqlind フィールドは無視されます。 |
sqlname | VARCHAR(30) | 非修飾の列名。
システムが生成した名前を持つ列 (結果列は単一の列から直接得られたものでなく、 AS 文節を使用して名前を指定していない) の場合、 13 バイト目は X'FF' に設定されます。 AS 文節によって列名が指定された場合は、このバイトは X'00' になります。 | DRDA アプリケーション・サーバーへのアクセスに CALL ステートメントで使用する場合、
FOR BIT DATA ストリングを指定するには、sqlname を次のように設定します。
さらに、sqltype は CHAR、 VARCHAR、または LONG VARCHAR を示すものでなければならず、 sqldaid フィールドの 6 バイト目は文字 '+' に設定されます。
この手法は、OPEN および EXECUTE で、 DB2 コネクトを使用してサーバーにアクセスする際に使用できます。 |
関連情報: