スケーラブルデータベースサーバ HiRDB Version 8 XDM/RD E2接続機能

[目次][索引][前へ][次へ]

付録A.1 SQLのデータ型とC言語のデータ記述

SQLのデータ型とC言語のデータ記述の対応は,マニュアル「HiRDB Version 8 UAP開発ガイド」の「SQLのデータ型とC言語のデータ記述」で示す対応に従います。ただし,XDM/RD E2接続機能で固有の対応をする場合があるので注意が必要です。

<この項の構成>
(1) 配列,繰返し列を使用しない場合
(2) 配列を使用する場合
(3) 繰返し列を使用する場合

(1) 配列,繰返し列を使用しない場合

SQLのデータ型とC言語のデータ記述の対応の,XDM/RD E2接続機能を使用時に固有の追加項目を次の表に示します。

表A-1 SQLのデータ型とC言語のデータ記述(追加項目)

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 Version 8 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
}変数名;
 
  1. 変数名_reservedは,使用しません。64ビットモードの場合は,int 変数名_reserved;となります。
  2. 変数名_lengthは,CLOBの実際の長さ(バイト)になります。64ビットモードの場合は,unsigned int 変数名_lengthとなります。
  3. 変数名_data[m]は,CLOBのデータ格納領域(mは実際のデータ長)になります。

注※3
CLOB位置付け子のUAPの記述は,内部的に次のように展開されます。
 
unsigned long 変数名;
 
64ビットモードの場合は,unsigned long 変数名はunsigned int 変数名;になります。

 

また,SQLのデータ型とC言語のデータ記述の変更前と変更後を表A-2および表A-3に示します。

表A-2 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:小数秒精度

表A-3 SQLのデータ型とC言語のデータ記述(変更後)

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接続機能を使用時に固有の追加項目(配列を使用する場合)を次の表に示します。

表A-4 配列を使用する場合のSQLのデータ型とC言語のデータ記述(追加項目)

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言語のデータ記述の変更前と変更後を表A-5および表A-6に示します。

表A-5 配列を使用する場合の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:小数秒精度

表A-6 配列を使用する場合のSQLのデータ型とC言語のデータ記述(変更後)

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接続機能を使用時に固有の追加項目(繰返し列を使用する場合)を次の表に示します。

表A-7 繰返し列を使用する場合のSQLのデータ型とC言語のデータ記述(追加項目)

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言語のデータ記述の変更前と変更後を表A-8および表A-9に示します。

表A-8 繰返し列を使用する場合の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:小数秒精度

表A-9 繰返し列を使用する場合のSQLのデータ型とC言語のデータ記述(変更後)

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:小数秒精度

太字の部分が変更点です。