付録A.1 SQLのデータ型とC言語のデータ記述
SQLのデータ型とC言語のデータ記述の対応は,マニュアル「HiRDB UAP開発ガイド」の「SQLのデータ型とC言語のデータ記述」で示す対応に従います。ただし,XDM/RD E2接続機能で固有の対応をする場合があるので注意が必要です。
(1) 配列,繰返し列を使用しない場合
SQLのデータ型とC言語のデータ記述の対応の,XDM/RD E2接続機能を使用時に固有の追加項目を次の表に示します。
SQLのデータ型 |
C言語のデータ記述 |
項目の記述 |
備考 |
|
---|---|---|---|---|
LARGE DECIMAL [(p[,s])] |
SQL TYPE IS DECIMAL(p,s) 変数名;※1 |
変数 |
1≦p≦29, 0≦s≦p |
|
LONG VARCHAR(n) |
struct { short 変数名1; char 変数名2[n]; } 構造体名; |
二つの変数から構成される構造体 変数名1:文字列長 変数名2:文字列 |
1≦n≦32,000 |
|
LONG NVARCHAR(n) |
struct { short 変数名1; char 変数名2[2n]; } 構造体名; |
二つの変数から構成される構造体 変数名1:文字列長 変数名2:文字列 |
1≦n≦16,000 |
|
LONG MVARCHAR(n) |
struct { short 変数名1; char 変数名2[n]; } 構造体名; |
二つの変数から構成される構造体 変数名1:文字列長 変数名2:文字列 |
1≦n≦32,000 |
|
INTERVAL YEAR TO SECOND(q) |
SQL TYPE IS DECIMAL(14+q,q) 変数名; |
変数 |
q=0,2,4,6 |
|
CLOB |
SQL TYPE IS CLOB(n{K|M|G})変数名;※2 |
変数 |
単位省略時: 1≦n≦2,147,483,647 単位がKB: 1≦n≦2,097,152 単位がMB: 1≦n≦2,048 単位がGB: 1≦n≦2 |
|
CLOB位置付け子 |
SQL TYPE IS CLOB AS LOCATOR変数名; ※3 |
変数 |
− |
|
標識変数 |
CLOB |
long 変数名; |
変数 |
− |
- (凡例)
-
n:長さ(バイト)
p:精度(全体のけた数)
q:小数秒精度
s:位取り(小数点以下のけた数)
−:備考はありません。
- 注※1
-
DECIMALのUAPの記述は,内部的に次のように展開されます。
unsigned char 変数名[p/2+1];
DECIMALのデータは1バイトで2けたの数字を表現します。符号は,右端のバイトの右4ビットで表します。そのため,偶数けたのDECIMAL型の場合,左端の左4ビットに0を補う必要があります。0以外の値は設定しないでください。
標準的な符号表現を次に示します。HiRDBでのDECIMAL型の符号については,マニュアル「HiRDB SQLリファレンス」を参照してください。
符号の16進数表現
意味
X'C'
正の符号とみなします。正数には0を含みます。
X'D'
負の符号とみなします。
記述例
- 123.4567の場合(奇数けた)
-
unsigned char ex1[4]={0x12,0x34,0x56,0x7c} ;
- -123.456の場合(偶数けた)
-
unsigned char ex2[4]={0x01,0x23,0x45,0x6d} ;
- 0の場合(奇数けた)
-
unsigned char ex3[1]={0x0c} ;
- 注※2
-
CLOBのUAPの記述は,内部的に次のように展開されます。
struct{ long 変数名_reserved; … 1 unsigned long 変数名_length; … 2 char 変数名_data[m]; … 3 }変数名;
-
変数名_reservedは,使用しません。64ビットモードの場合は,int 変数名_reserved;となります。
-
変数名_lengthは,CLOBの実際の長さ(バイト)になります。64ビットモードの場合は,unsigned int 変数名_lengthとなります。
-
変数名_data[m]は,CLOBのデータ格納領域(mは実際のデータ長)になります。
-
- 注※3
-
CLOB位置付け子のUAPの記述は,内部的に次のように展開されます。
unsigned long 変数名;
64ビットモードの場合は,unsigned long 変数名はunsigned int 変数名;になります。
また,SQLのデータ型とC言語のデータ記述の変更前と変更後を表「SQLのデータ型とC言語のデータ記述(変更前)」および表「SQLのデータ型とC言語のデータ記述(変更後)」に示します。
SQLのデータ型 |
C言語のデータ記述 |
項目の記述 |
備考 |
---|---|---|---|
TIME |
char 変数名[9]; |
変数 |
− |
TIMESTAMP[(q)] |
char 変数名[n+1]; |
変数 |
q=0の場合:n=19 q=2の場合:n=21,22 q=4の場合:n=23,24 q=6の場合:n=25,26 |
- (凡例)
-
n:長さ(バイト)
q:小数秒精度
−:備考はありません。
SQLのデータ型 |
C言語のデータ記述 |
項目の記述 |
備考 |
---|---|---|---|
TIME[(q)] |
char 変数名[n+1]; |
変数 |
q=0の場合:n=8 q=2の場合:n=11 q=4の場合:n=13 q=6の場合:n=15 |
TIMESTAMP[(q)] |
char 変数名[n+1]; |
変数 |
q=0の場合:n=19 q=2の場合:n=22 q=4の場合:n=24 q=6の場合:n=26 |
- (凡例)
-
n:長さ(バイト)
q:小数秒精度
- 注
-
太字の部分が変更点です。
(2) 配列を使用する場合
SQLのデータ型とC言語のデータ記述の対応の,XDM/RD E2接続機能を使用時に固有の追加項目(配列を使用する場合)を次の表に示します。
SQLのデータ型 |
C言語のデータ記述 |
項目の記述 |
備考 |
---|---|---|---|
LARGE DECIMAL |
− |
− |
− |
LONG VARCHAR(n) |
struct { short 変数名1; char 変数名2[n]; } 構造体名[m]; |
構造体の配列 |
1≦n≦32,000 |
LONG NVARCHAR(n) |
struct { short 変数名1; char 変数名2[2n]; } 構造体名[m]; |
構造体の配列 |
1≦n≦16,000 |
LONG MVARCHAR(n) |
struct { short 変数名1; char 変数名2[n]; } 構造体名[m]; |
構造体の配列 |
1≦n≦32,000 |
ROW |
char 変数名[m][n+1]; |
構造体の配列 |
1≦n≦30,000 |
INTERVAL YEAR TO SECOND(q) |
− |
− |
− |
CLOB |
− |
− |
− |
CLOB位置付け子 |
− |
− |
− |
- (凡例)
-
m:配列の要素数
n:長さ(バイト)
q:小数秒精度
−:該当しません。
また,SQLのデータ型とC言語のデータ記述の変更前と変更後を表「配列を使用する場合のSQLのデータ型とC言語のデータ記述(変更前)」および表「配列を使用する場合のSQLのデータ型とC言語のデータ記述(変更後)」に示します。
SQLのデータ型 |
C言語のデータ記述 |
項目の記述 |
備考 |
---|---|---|---|
TIME |
char 変数名[m][9]; |
配列 |
− |
TIMESTAMP[(q)] |
char 変数名[m][n+1]; |
配列 |
q=0の場合:n=19 q=2の場合:n=21,22 p=4の場合:n=23,24 q=6の場合:n=25,26 |
- (凡例)
-
m:配列の要素数
n:長さ(バイト)
q:小数秒精度
−:備考はありません。
SQLのデータ型 |
C言語のデータ記述 |
項目の記述 |
備考 |
---|---|---|---|
TIME[(q)] |
char 変数名[m][n+1]; |
配列 |
q=0の場合:n=8 q=2の場合:n=11 q=4の場合:n=13 q=6の場合:n=15 |
TIMESTAMP[(q)] |
char 変数名[m][n+1]; |
配列 |
q=0の場合:n=19 q=2の場合:n=22 q=4の場合:n=24 q=6の場合:n=26 |
- (凡例)
-
m:配列の要素数
n:長さ(バイト)
q:小数秒精度
- 注
-
太字の部分が変更点です。
(3) 繰返し列を使用する場合
SQLのデータ型とC言語のデータ記述の対応の,XDM/RD E2接続機能を使用時に固有の追加項目(繰返し列を使用する場合)を次の表に示します。
SQLのデータ型 |
C言語のデータ記述 |
項目の記述 |
備考 |
---|---|---|---|
LARGE DECIMAL [(p[,s])] |
PD_MV_DEC(m,p,s) 変数名; |
要素と配列から構成される構造体 |
− |
NVARCHAR(n) |
PD_MV_NVCHAR(m,n) 変数名; |
要素と配列から構成される構造体 |
1≦n≦16,000 |
TIMESTAMP |
PD_MV_CHAR(m,19) 変数名; |
要素と配列から構成される構造体 |
− |
INTERVAL YEAR TO SECOND(q) |
PD_MV_DEC(m,14+q,q) 変数名; |
要素と配列から構成される構造体 |
q=0,2,4,6 |
CLOB |
− |
− |
− |
CLOB位置付け子 |
− |
− |
− |
- (凡例)
-
m:繰返し列の最大要素数
n:長さ(バイト)
p:精度(全体のけた数)
q:小数秒精度
s:位取り(小数点以下のけた数)
−:該当しません。
また,SQLのデータ型とC言語のデータ記述の変更前と変更後を表「繰返し列を使用する場合のSQLのデータ型とC言語のデータ記述(変更前)」および表「繰返し列を使用する場合のSQLのデータ型とC言語のデータ記述(変更後)」に示します。
SQLのデータ型 |
C言語のデータ記述 |
項目の記述 |
備考 |
---|---|---|---|
VARCHAR(n) /MVARCHAR(n) |
PD_MV_VCHAR(m,n) 変数名; |
要素と配列から構成される構造体 |
1≦n≦32,000 |
NVARCHAR(n) |
PD_MV_NVCHAR(m,n) 変数名; |
1≦n≦16,000 |
|
TIME |
PD_MV_CHAR(m,8) 変数名; |
− |
|
TIMESTAMP[(q)] |
PD_MV_CHAR(m,n) 変数名; |
q=0の場合:n=19 q=2の場合:n=21,22 q=4の場合:n=23,24 q=6の場合:n=25,26 |
- (凡例)
-
m:繰返し列の最大要素数
n:長さ(バイト)
q:小数秒精度
−:備考はありません。
SQLのデータ型 |
C言語のデータ記述 |
項目の記述 |
備考 |
---|---|---|---|
VARCHAR(n) /LONG VARCHAR(n) /MVARCHAR(n) /LONG MVARCHAR(n) |
PD_MV_VCHAR(m,n) 変数名; |
要素と配列から構成される構造体 |
1≦n≦32,000 |
NVARCHAR(n) /LONG NVARCHAR(n) |
PD_MV_NVCHAR(m,n) 変数名; |
1≦n≦16,000 |
|
TIME[(q)] |
PD_MV_CHAR(m,n) 変数名; |
q=0の場合:n=8 q=2の場合:n=11 q=4の場合:n=13 q=6の場合:n=15 |
|
TIMESTAMP[(q)] |
PD_MV_CHAR(m,n) 変数名; |
q=0の場合:n=19 q=2の場合:n=22 q=4の場合:n=24 q=6の場合:n=26 |
- (凡例)
-
m:繰返し列の最大要素数
n:長さ(バイト)
q:小数秒精度
- 注
-
太字の部分が変更点です。