SQLのデータ型と対応するCホスト変数のデータ型を以下に示します。
SQLデータ型 | C変数定義 | |
---|---|---|
文字列型 | CHARACTER(n) | char 変数名[n+1] |
CHARACTER VARYING(n) | VARCHAR 変数名[n+1] (注2) | |
各国語 | NATIONAL CHARACTER(n) | char CHARACTER SET[IS] |
NATIONAL CHARACTER VARYING(n) | VARCHAR CHARACTER SET[IS]NCHAR | |
真数型 | NUMERIC(p,q) | NUMERIC(p,q) 変数名 (注4) |
DECIMAL(p,q) | DECIMAL(p,q) 変数名 (注5) | |
SMALLINT | short 変数名 | |
INTEGER | long 変数名 (注6) | |
概数型 | REAL | float 変数名 |
DOUBLE PRECISION | double 変数名 | |
日時型 | DATE | char 変数名[11] |
TIME | char 変数名[9] | |
TIMESTAMP | char 変数名[20] | |
時間隔型 | INTERVAL | |
BLOB型 | BINARY LARGE OBJECT(n単位) | SQL TYPE IS BLOB(n単位) 変数名 (注7) |
ROW_ID | ROW_ID | ROW_ID 変数名 |
n:長さ、p:精度、q:位取り、単位:K(キロバイト)、 M(メガバイト)、G(ギガバイト)
注1) 各型のポインタ変数を宣言する場合は、変数名の前に*を指定します。
注2) 可変長文字列の場合、コンパイル時に以下の構造体に展開されます。
struct { short sqllen; char sqlvar[n+1]; } 変数名
注3) 可変長文字列のポインタ変数の場合、コンパイル時に以下の構造体に展開されます。
struct 変数名_SQLVAR{ short sqllen; char sqlvar[1]; } *変数名
注4) NUMERIC型の場合、コンパイル時に以下のように展開されます。
char 変数名 [p+1];
注5) DECIMAL型の場合、コンパイル時に以下のように展開されます。
char 変数名 [(p÷2)+1];
注6) 64ビットのSQL埋込みCプログラムの場合、対応するC変数定義はintです。
注7) BLOB型の場合、コンパイル時に以下の構造体に展開されます。
struct { long 変数名_reserved; 注) unsigned long 変数名_length; 注) char 変数名_data[n*1024]; } 変数名
注8) BLOB型のポインタ変数の場合、コンパイル時に以下の構造体に展開されます。
struct 変数名_SQLBLOB{ long 変数名_reserved; 注) unsigned long 変数名_length; char 変数名_data[1]; } *変数名
注)64ビットのSQL埋込みCプログラムの場合、longはintに展開されます。
時間隔型と対応するCホスト変数のデータ型を以下に示します。
時間隔型 | C変数定義 | |
---|---|---|
年月型 | INTERVAL YEAR[(n)] TO MONTH | char 変数名[n+5] |
INTERVAL YEAR[(n)] | char 変数名[n+2] | |
INTERVAL MONTH[(n)] | char 変数名[n+2] | |
日時型 | INTERVAL DAY[(n)] TO HOUR | char 変数名[n+5] |
INTERVAL DAY[(n)] TO MINUTE | char 変数名[n+8] | |
INTERVAL DAY[(n)] TO SECOND | char 変数名[n+11] | |
INTERVAL DAY[(n)] | char 変数名[n+2] | |
INTERVAL HOUR[(n)] TO MINUTE | char 変数名[n+5] | |
INTERVAL HOUR[(n)] TO SECOND | char 変数名[n+8] | |
INTERVAL HOUR[(n)] | char 変数名[n+2] | |
INTERVAL MINUTE[(n)] TO SECOND | char 変数名[n+5] | |
INTERVAL MINUTE[(n)] | char 変数名[n+2] | |
INTERVAL SECOND[(n)] | char 変数名[n+2] |
n:桁数(1~9)
注) 位取り0の真数型が指定可能なので、以下のデータ型も指定できます。
short 変数名 ( n<5の場合 )
SQLのデータ型と対応するCOBOLホスト変数のデータ型を以下に示します。
SQLデータ型 | COBOL変数定義 | |
---|---|---|
文字列型 | CHARACTER(n) | 01 変数名 PIC X(n). |
CHARACTER VARYING(n) | 01 変数名-1. | |
各国語 | NATIONAL CHARACTER(n) | 01 変数名 PIC N(n). |
NATIONAL CHARACTER VARYING(n) | 01 変数名-1. | |
真数型 | NUMERIC(p,q) | 01 変数名 PIC S9(p-q)V9(q) DISPLAY [SIGN] {LEADING SEPARATE [CHARACTER]|TRAILING}. |
DECIMAL(p,q) | 01 変数名 PIC S9(p-q)V9(q) {PACKED-DECIMAL|COMP-3}. | |
SMALLINT | 01 変数名 PIC S9(4) {BINARY|COMP}. | |
INTEGER | 01 変数名 PIC S9(9) {BINARY|COMP}. | |
概数型 | REAL | 01 変数名 COMP-1. |
DOUBLE PRECISION | 01 変数名 COMP-2. | |
日時型 | DATE | 01 変数名 PIC X(10). |
TIME | 01 変数名 PIC X(8). | |
TIMESTAMP | 01 変数名 PIC X(19). | |
時間隔型 | INTERVAL | “表:時間隔型と対応するCOBOLホスト変数のデータ型”参照 |
BLOB型 | BINARY LARGE OBJECT(n単位) | 01 変数名 SQL TYPE IS BLOB(n単位). (注) |
ROW_ID | ROW_ID | 01 変数名 ROW_ID. |
n:長さ、p:精度、q:位取り、単位:K(キロバイト)、M(メガバイト)、G(ギガバイト)
注) BLOB型の場合、コンパイル時に以下の構造体に展開されます(単位がKの場合)。
01 変数名. 49 変数名-RESERVED PIC S9(9) USAGE IS BINARY. 49 変数名-LENGTH PIC S9(9) USAGE IS BINARY. 49 変数名-DATA PIC X(n*1024).
時間隔型と対応するCOBOLホスト変数のデータ型を以下に示します。
時間隔型 | COBOL変数定義 | |
---|---|---|
年月型 | INTERVAL YEAR[(n)] TO MONTH | 01 変数名 PIC X(n+4). |
INTERVAL YEAR[(n)] | 01 変数名 PIC X(n+1). | |
INTERVAL MONTH[(n)] | 01 変数名 PIC X(n+1). | |
日時型 | INTERVAL DAY[(n)] TO HOUR | 01 変数名 PIC X(n+4). |
INTERVAL DAY[(n)] TO MINUTE | 01 変数名 PIC X(n+7). | |
INTERVAL DAY[(n)] TO SECOND | 01 変数名 PIC X(n+10). | |
INTERVAL DAY[(n)] | 01 変数名 PIC X(n+1). | |
INTERVAL HOUR[(n)] TO MINUTE | 01 変数名 PIC X(n+4). | |
INTERVAL HOUR[(n)] TO SECOND | 01 変数名 PIC X(n+7). | |
INTERVAL HOUR[(n)] | 01 変数名 PIC X(n+1). | |
INTERVAL MINUTE[(n)] TO SECOND | 01 変数名 PIC X(n+4). | |
INTERVAL MINUTE[(n)] | 01 変数名 PIC X(n+1). | |
INTERVAL SECOND[(n)] | 01 変数名 PIC X(n+1). |
n:桁数(1~9)
注) 位取り0の真数型が指定可能なので、以下のデータ型も指定できます。
01 変数名 PIC S9(n) DISPLAY [SIGN] {LEADING SEPARATE [CHARACTER]|TRAILING}. 01 変数名 PIC S9(n) {PACKED-DECIMAL|COMP-3}. 01 変数名 PIC S9(4) {BINARY|COMP}. ( n<5の場合 )