特定の事前定義済み C および C++ データ・タイプは、データベース・マネージャーの列タイプに対応しています。これらの C/C++ データ・タイプのみが、ホスト変数として宣言できます。
表 30 は、それぞれの列タイプに対応する C/C++ の列タイプを示しています。プリコンパイラーはホスト変数宣言を検出すると、該当する SQL データ・タイプの値を判別します。データベース・マネージャーはこの値を使用して、アプリケーションとの間でやりとりするデータを変換します。
注: | DB2 ホスト言語で、DATALINK データ・タイプをサポートするホスト変数はありません。 |
表 30. C/C++ 宣言にマップされた SQL データ・タイプ
SQL 列タイプ(1) | C/C++ データ・タイプ | SQL 列タイプ記述 | ||
---|---|---|---|---|
SMALLINT (500 または 501) |
short short int sqlint16 | 16 ビットの符号付き整数 | ||
INTEGER (496 または 497) |
long long int sqlint32(2) | 32 ビットの符号付き整数 | ||
BIGINT (492 または 493) |
long long long __int64 sqlint64(3) | 64 ビットの符号付き整数 | ||
REAL(4) (480 または 481) | float | 単精度浮動小数点 | ||
DOUBLE(5) (480 または 481) | double | 倍精度浮動小数点 | ||
DECIMAL(p,s) (484 または 485) | 厳密な対応なし; double を使用 | パック 10 進数
(パック 10 進フィールドを文字データとして操作するために CHAR および DECIMAL 関数を使用することを推奨。) | ||
CHAR(1) (452 または 453) | char | 単一文字 | ||
CHAR(n) (452 または 453) | 厳密な対応なし;
char[n+1] を使用
(n はデータを保持するだけの十分な大きさ)
| 固定長文字ストリング | ||
VARCHAR(n) (448 または 449) |
struct tag { short int; char[n] } 1<=n<=32 672 | 2 バイトのストリング長指定子を持つ、NULL 終了可変文字以外のストリング | ||
代替使用;
char[n+1] を使用
(n はデータを保持するだけの十分な大きさ)
| NULL 終了可変長文字ストリング
| |||
LONG VARCHAR (456 または 457) |
struct tag { short int; char[n] } 32 673<=n<=32 700 | 2 バイトのストリング長指定子を持つ、NULL 終了可変文字以外のストリング | ||
CLOB(n) (408 または 409) |
sql type is clob(n) 1<=n<=2 147 483 647 | 4 バイトのストリング長指定子を持つ、NULL 終了可変文字以外のストリング | ||
CLOB ロケーター変数(6) (964 または 965) |
sql type is clob_locator | サーバー上の CLOB 実体を識別する | ||
CLOB ファイル参照変数(6) (920 または 921) |
sql type is clob_file | CLOB データを含むファイルの記述子 | ||
BLOB(n) (404 または 405) |
sql type is blob(n) 1<=n<=2 147 483 647 | 4 バイトのストリング長指定子を持つ、NULL 終了可変文字以外のストリング | ||
BLOB ロケーター変数(6) (960 または 961) |
sql type is blob_locator | サーバー上の BLOB 実体を識別する | ||
BLOB ファイル参照変数(6) (916 または 917) |
sql type is blob_file | BLOB データを含むファイルの記述子 | ||
DATE (384 または 385) | NULL 終了文字書式 | NULL 終止符を収容するために最低 11 文字を使用できる。 | ||
VARCHAR 構造書式 | 最低 10 文字を使用できる。 | |||
TIME (388 または 389) | NULL 終了文字書式 | NULL 終止符を収容するために最低 9 文字を使用できる。 | ||
VARCHAR 構造書式 | 最低 8 文字を使用できる。 | |||
TIMESTAMP (392 または 393) | NULL 終了文字書式 | NULL 終止符を収容するために最低 27 文字を使用できる。 | ||
VARCHAR 構造書式 | 最低 26 文字が使用できる。 | |||
| ||||
GRAPHIC(1) (468 または 469) | sqldbchar | 単一の 2 バイト文字 | ||
GRAPHIC(n) (468 または 469) | 厳密な対応なし;
sqldbchar[n+1] を使用
(n はデータを保持するだけの十分な大きさ)
| 固定長 2 バイト文字ストリング | ||
VARGRAPHIC(n) (464 または 465) |
struct tag { short int; sqldbchar[n] } 1<=n<=16 336 | 2 バイトのストリング長指定子を持つ、NULL 終了可変 2 バイト文字以外のストリング | ||
代替使用;
sqldbchar[n+1] を使用
(n はデータを保持するだけの十分な大きさ)
| NULL 終了可変長 2 バイト文字ストリング
| |||
LONG VARGRAPHIC (472 または 473) |
struct tag { short int; sqldbchar[n] } 16 337<=n<=16 350 | 2 バイトのストリング長指定子を持つ、NULL 終了可変 2 バイト文字以外のストリング | ||
| ||||
GRAPHIC(1) (468 または 469) | wchar_t |
| ||
GRAPHIC(n) (468 または 469) | 厳密な対応なし;
wchar[n+1] を使用
(n はデータを保持するだけの十分な大きさ)
| 固定長 2 バイト文字ストリング | ||
VARGRAPHIC(n) (464 または 465) |
struct tag { short int; wchar_t [n] } 1<=n<=16 336 | 2 バイトのストリング長指定子を持つ、NULL 終了可変 2 バイト文字以外のストリング | ||
代替使用;
char[n+1] を使用
(n はデータを保持するだけの十分な大きさ)
| NULL 終了可変長 2 バイト文字ストリング
| |||
LONG VARGRAPHIC (472 または 473) |
struct tag { short int; wchar_t [n] } 16 337<=n<=16 350 | 2 バイトのストリング長指定子を持つ、NULL 終了可変 2 バイト文字以外のストリング | ||
| ||||
DBCLOB(n) (412 または 413) |
sql type is dbclob(n) 1<=n<=1 073 741 823 | 4 バイトのストリング長指定子を持つ、NULL 終了可変 2 バイト文字以外のストリング | ||
DBCLOB ロケーター変数(6) (968 または 969) |
sql type is dbclob_locator | サーバー上の DBCLOB 実体を識別する | ||
DBCLOB ファイル参照 変数(TNTA4) (924 または 925) |
sql type is dbclob_file | DBCLOB データを含むファイルの記述子 | ||
注:
|
以下に、サポートされている SQL データ・タイプのために宣言されたホスト変数を使用したサンプルの SQL 宣言セクションを示します。
EXEC SQL BEGIN DECLARE SECTION;
.
.
.
short age = 26; /* SQL type 500 */ short year; /* SQL type 500 */ sqlint32 salary; /* SQL type 496 */ sqlint32 deptno; /* SQL type 496 */ float bonus; /* SQL type 480 */ double wage; /* SQL type 480 */ char mi; /* SQL type 452 */ char name[6]; /* SQL type 460 */ struct { short len; char data[24]; } address; /* SQL type 448 */ struct { short len; char data[32695]; } voice; /* SQL type 456 */ sql type is clob(1m) chapter; /* SQL type 408 */ sql type is clob_locator chapter_locator; /* SQL type 964 */ sql type is clob_file chapter_file_ref; /* SQL type 920 */ sql type is blob(1m) video; /* SQL type 404 */ sql type is blob_locator video_locator; /* SQL type 960 */ sql type is blob_file video_file_ref; /* SQL type 916 */ sql type is dbclob(1m) tokyo_phone_dir; /* SQL type 412 */ sql type is dbclob_locator tokyo_phone_dir_lctr; /* SQL type 968 */ sql type is dbclob_file tokyo_phone_dir_flref; /* SQL type 924 */ struct { short len; sqldbchar data[100]; } vargraphic1; /* SQL type 464 */ /* Precompiled with WCHARTYPE NOCONVERT option */ struct { short len; wchar_t data[100]; } vargraphic2; /* SQL type 464 */ /* Precompiled with WCHARTYPE CONVERT option */ struct { short len; sqldbchar data[10000]; } long_vargraphic1; /* SQL type 472 */ /* Precompiled with WCHARTYPE NOCONVERT option */ struct { short len; wchar_t data[10000]; } long_vargraphic2; /* SQL type 472 */ /* Precompiled with WCHARTYPE CONVERT option */ sqldbchar graphic1[100]; /* SQL type 468 */ /* Precompiled with WCHARTYPE NOCONVERT option */ wchar_t graphic2[100]; /* SQL type 468 */ /* Precompiled with WCHARTYPE CONVERT option */ char date[11]; /* SQL type 384 */ char time[9]; /* SQL type 388 */ char timestamp[27]; /* SQL type 392 */ short wage_ind; /* Null indicator */
.
.
.
EXEC SQL END DECLARE SECTION;
以下に、サポートされている C/C++ データ・タイプに関するその他の規則を示します。
標準的な C または C++ のストリング・タイプである 460 は、FOR BIT DATA に指定された列に使用しないでください。データベース・マネージャーは、NULL 文字が検出されると、このデータ・タイプを切り捨てます。 VARCHAR (SQL タイプ 448) または CLOB (SQL タイプ 408) のどちらかを使用してください。