Hitachi

ノンストップデータベース HiRDB Version 9 XDM/RD E2接続機能


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

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

〈この項の構成〉

(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 9 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言語のデータ記述の変更前と変更後を表「SQLのデータ型とC言語のデータ記述(変更前)」および表「SQLのデータ型とC言語のデータ記述(変更後)」に示します。

表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言語のデータ記述の変更前と変更後を表「配列を使用する場合のSQLのデータ型とC言語のデータ記述(変更前)」および表「配列を使用する場合のSQLのデータ型とC言語のデータ記述(変更後)」に示します。

表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言語のデータ記述の変更前と変更後を表「繰返し列を使用する場合のSQLのデータ型とC言語のデータ記述(変更前)」および表「繰返し列を使用する場合のSQLのデータ型とC言語のデータ記述(変更後)」に示します。

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

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