表 39 に、
SQLDA の SQLTYPE フィールドと SQLLEN フィールドに現れる値を示します。
DESCRIBE と PREPARE INTO においては、
SQLTYPE の値が偶数ならその列ではヌル値 (NULL) が使えないこと、
また奇数ならその列でヌル値が可能であることを意味しています。
FETCH、OPEN、EXECUTE、および CALL において、
SQLTYPE の値が偶数の場合には標識変数がないこと、
奇数の場合には SQLIND に標識変数のアドレスが入れられていることを意味しています。
表 39. SQLTYPE と SQLLEN の値 (DESCRIBE、FETCH、OPEN、EXECUTE、および CALL の場合)
| DESCRIBE および PREPARE INTO の場合 | FETCH、OPEN、EXECUTE、および CALL の場合 | ||||
---|---|---|---|---|---|---|
SQLTYPE | 列のデータ・タイプ | SQLLEN | ホスト変数のデータ・タイプ | SQLLEN | ||
384/385 | 日付 | 10 | 日付の固定長文字ストリング表示 | ホスト変数の長さ属性 | ||
388/389 | 時刻 | 8 | 時刻の固定長文字ストリング表示 | ホスト変数の長さ属性 | ||
392/393 | タイム・スタンプ | 26 | タイム・スタンプの固定長文字ストリング表示 | ホスト変数の長さ属性 | ||
396/397 | DATALINK | 列の長さ属性 | DATALINK | ホスト変数の長さ属性 | ||
400/401 | 適用外 | 適用外 | NUL 文字で終了する漢字ストリング | ホスト変数の長さ属性 | ||
404/405 | BLOB | 0 * | BLOB | 使用されません。* | ||
408/409 | CLOB | 0 * | CLOB | 使用されません。* | ||
412/413 | DBCLOB | 0 * | DBCLOB | 使用されません。* | ||
448/449 | 可変長文字ストリング | 列の長さ属性 | 可変長文字ストリング | ホスト変数の長さ属性 | ||
452/453 | 固定長文字ストリング | 列の長さ属性 | 固定長文字ストリング | ホスト変数の長さ属性 | ||
456/457 | 長形式可変長文字ストリング | 列の長さ属性 | 長形式可変長文字ストリング | ホスト変数の長さ属性 | ||
460/461 | 適用外 | 適用外 | NUL 文字で終了する文字ストリング | ホスト変数の長さ属性 | ||
464/465 | 可変長漢字ストリング | 列の長さ属性 | 可変長漢字ストリング | ホスト変数の長さ属性 | ||
468/469 | 固定長漢字ストリング | 列の長さ属性 | 固定長漢字ストリング | ホスト変数の長さ属性 | ||
472/473 | 長形式可変長漢字ストリング | 列の長さ属性 | 長形式漢字ストリング | ホスト変数の長さ属性 | ||
480/481 | 浮動小数点数 | 倍精度の場合は 8、単精度の場合は 4 | 浮動小数点数 | 倍精度の場合は 8、単精度の場合は 4 | ||
484/485 | パック 10 進数 | バイト 1 は精度、バイト 2 は位取り | パック 10 進数 | バイト 1 は精度、バイト 2 は位取り | ||
492/493 | 大整数 | 8 | 大整数 | 8 | ||
496/497 | 大整数 | 4 | 大整数 | 4 | ||
500/501 | 小整数 | 2 | 小整数 | 2 | ||
916/917 | 該当なし | 該当なし | BLOB ファイル参照変数 | 267 | ||
920/921 | 該当なし | 該当なし | CLOB ファイル参照変数 | 267 | ||
924/925 | 該当なし | 該当なし | DBCLOB ファイル参照変数 | 267 | ||
960/961 | 該当なし | 該当なし | BLOB ロケーター | 4 | ||
964/965 | 該当なし | 該当なし | CLOB ロケーター | 4 | ||
968/969 | 該当なし | 該当なし | DBCLOB ロケー ター | 4 | ||
|
SQLDA の SQLTYPE フィールドに表示される値は、 データの送信側および受信側で使用可能なデータ・タイプ・サポートのレベルによって異なります。 これは、新しいデータ・タイプが製品に追加される場合に特に重要です。
新しいデータ・タイプは、データの送信側または受信側にサポートされることもあれば、 サポートされないこともあり、データの送信側や受信側に認識されないことさえあります。 状況に応じて、新しいデータ・タイプが戻されたり、 送信側と受信側の両方が認めた互換データ・タイプが戻されたり、 あるいは結果としてエラーが発生したりします。
送信側と受信局が互換データ・タイプの使用に同意する場合、
以下に示すマッピングが実行されます。
このマッピングは、
送信側または受信側の少なくともどちらかが指定データ・タイプをサポートしない場合に実行されます。
非サポート・データ・タイプは、
アプリケーションまたはデータベース・マネージャーのどちらかによって提供されます。
データ・タイプ | 互換データ・タイプ |
---|---|
BIGINT | DECIMAL(19, 0) |
ROWID | VARCHAR(40) FOR BIT DATA114 |
SQLDA では、データ・タイプが置換されたことは示されないので注意してください。
パック 10 進数は、一種の 2 進コードによる 10 進数 (BCD) 表記で保管されます。 BCD においては、1 ニブル (4 ビット) で 10 進数の 1 桁が表されます。 たとえば、0001 0111 1001 は 179 を表します。 したがって、パック 10 進数の値はニブルごとに読む必要があります。 値の保管はバイト単位で行い、16 進数表記としてそれらのバイトを読み、 それを 10 進数に戻します。 たとえば、0001 0111 1001 は、2 進表記では 00000001 01111001 となります。 この数値を 16 進数として読むと、0179 になります。
小数点は、位取りによって決まります。 たとえば、DEC(12,5) の列の場合、小数点より右側に 5 桁あることになります。
符号は、桁数を表すニブルの右側のニブルで示します。
正記号または負記号は、以下のように示します。
符号 | 表記 | ||
---|---|---|---|
2 進 | 10 進 | 16 進 | |
正符号 (+) | 1100 | 12 | C |
負符号 (-) | 1101 | 13 | D |
まとめ:
パック 10 進数を変換するもう 1 つの方法があります。 CHAR を参照してください。
たとえば、次のとおりです。
列 | 値 | バイトごとにグループにした 16 進のニブル |
---|---|---|
DEC(8,3) | 6574.23 | 00 65 74 23 0C |
DEC(6,2) | -334.02 | 00 33 40 2D |
DEC(7,5) | 5.2323 | 05 23 23 0C |
DEC(5,2) | -23.5 | 02 35 0D |
SQLLEN フィールドには、 10 進数の列の精度 (第 1 バイト) と位取り (第 2 バイト) が入れられます。 アプリケーションを移植可能にするには、 精度のバイトと位取りのバイトを短整数として一度に設定するのではなく、 個々に設定するようにしてください。 これによって、整数のバイト逆転の問題が回避されます。
たとえば、C の場合には以下のようにします。
((char *)&(sqlda->sqlvar[i].sqllen))[0] = precision; ((char *)&(sqlda->sqlvar[i].sqllen))[1] = scale;
関連情報: