スケーラブルデータベースサーバ HiRDB Version 8 UAP開発ガイド

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

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

SQLのデータ型とC言語のデータ記述の対応を示します。

なお,データの受け渡しには,対応するデータ型以外に,変換,又は代入できるデータ型も使用できます。

<この項の構成>
(1) SQLのデータ型とC言語のデータ記述
(2) 配列を使用した場合のSQLのデータ型とC言語のデータ記述
(3) 繰返し列を使用した場合のSQLのデータ型とC言語のデータ記述
(4) 埋込み変数の参照・設定に使用するマクロ
(5) ポインタ変数とC言語のデータ記述
(6) ポインタ型の繰返し列用のマクロ
(7) 一括指定用の構造体

(1) SQLのデータ型とC言語のデータ記述

SQLのデータ型とC言語のデータ記述を次の表に示します。

表F-1 SQLのデータ型とC言語のデータ記述

SQLのデータ型 C言語のデータ記述 備  考
SMALLINT short 変数名;  
INTEGER long 変数名;  
DECIMAL
[(p[,s])]
SQL TYPE IS
DECIMAL(p,s)
変数名;※5
1≦p≦38,0≦s≦p
SMALLFLT,REAL float 変数名;  
FLOAT(DOUBLE PRECISION) double 変数名;  
CHAR[(n)]
[CHARACTER SET 文字集合指定]
char
[CHARACTER SET[IS]
文字集合指定]
変数名[n+1];1
1≦n≦30000
文字集合指定:[MASTER.]EBCDIK
CHAR[(2n)]
CHARACTER SET 文字集合指定
char
CHARACTER SET[IS]
文字集合指定
変数名[2n+2];
1≦n≦15000
文字集合指定:[MASTER.]UTF16
SQL TYPE IS CHAR(2n)
CHARACTER SET[IS]
文字集合指定
変数名;10
VARCHAR(n)
[CHARACTER SET 文字集合指定]
struct {
short 変数名1;
char 変数名2[n];
}[CHARACTER SET[IS]
文字集合指定]
構造体名;
1≦n≦32000
変数名1:文字列長(バイト数)
変数名2:文字列
文字集合指定:[MASTER.]EBCDIK
SQL TYPE IS
VARCHAR(n)
[CHARACTER SET[IS]
文字集合指定]
変数名;※6
VARCHAR
[CHARACTER SET[IS]
文字集合指定]
変数名[n+1];※9
VARCHAR(2n)
CHARACTER SET 文字集合指定
struct {
short 変数名1;
char 変数名2[2n];
} CHARACTER SET[IS]
文字集合指定
構造体名;
1≦n≦16000
変数名1:文字列長
変数名2:文字列
文字列長:
バイト数で,2の倍数
文字集合指定:[MASTER.]UTF16
SQL TYPE IS
VARCHAR(2n)
CHARACTER SET[IS]
文字集合指定
変数名;11
VARCHAR
CHARACTER SET[IS]
文字集合指定
変数名[2n+2];10
NCHAR[(n)] char 変数名[2n+1];1 1≦n≦15000
NVARCHAR(n) struct {
short 変数名1;
char 変数名2[2n];
}構造体名;
1≦n≦16000
変数名1:文字列長(文字数)
変数名2:文字列
SQL TYPE IS
NVARCHAR(n)
変数名;※6
MCHAR[(n)] char 変数名[n+1];1 1≦n≦30000
MVARCHAR(n) struct{
short 変数名1;
char 変数名2[n];
}構造体名;
1≦n≦32000
変数名1:文字列長(バイト数)
変数名2:文字列
SQL TYPE IS
MVARCHAR(n)
変数名;※6
DATE char 変数名[11];2  
TIME char 変数名[9];2  
INTERVAL YEAR TO DAY SQL TYPE IS
DECIMAL(8,0)
変数名;※5
 
INTERVAL HOUR TO SECOND SQL TYPE IS
DECIMAL(6,0)
変数名;※5
 
TIMESTAMP[(p)] char 変数名[n+1];※2 p=0の場合はn=19
p=2の場合はn=21,22
p=4の場合はn=23,24
p=6の場合はn=25,26
ROW3 char 変数名[n+1]; 1≦全体長≦30000
BLOB SQL TYPE IS BLOB(n{K|M|G})
変数名;※4
単位省略時:
1≦n≦2147483647
単位がK:
1≦n≦2097152
単位がM:
1≦n≦2048
単位がG:
1≦n≦2
BINARY(n) struct {
long 変数名1;
char 変数名2[n];
} 構造体名;
1≦n≦2147483647
変数名1:文字列長(バイト数)
変数名2:文字列
SQL TYPE IS BINARY(n)
変数名;※7
BLOB位置付け子 SQL TYPE IS
BLOB AS LOCATOR
変数名;※8
 
BINARY位置付け子 SQL TYPE IS
BINARY AS LOCATOR
変数名;※8
 
標識変数 BLOB,BINARY,BLOB位置付け子,BINARY位置付け子以外 short 変数名;  
BLOB,BINARY,BLOB位置付け子,BINARY位置付け子 long 変数名;
SQL文 struct {
long 変数名1;
char 変数名2[n];
}構造体名;
1≦n≦2000000
変数名1:文字列長(バイト数)
変数名2:文字列

(凡例)
n:長さ(バイト)
p:精度(全体のけた数)
s:位取り(小数点以下のけた数)

64ビットモードの場合,longの代わりにintを使用してください。

注※1
SQLのデータ型(CHAR(n),NCHAR(n),MCHAR(n))と,C言語のデータ型(char[n+1],char[2n+1],char[n+1])との間での変換規則を示します。
入力時
  • char[n+1]からCHAR(n)への変換
  • char[2n+1]からNCHAR(n)への変換
  • char[n+1]からMCHAR(n)への変換
C言語の文字列からHiRDBが受け取る固定長文字列の長さは,先頭からナル文字の一つ前までの長さとします。なお,n+1個の配列要素の中にナル文字がない場合,長さをnとします。
出力時
  • CHAR(n)からchar[n+1]への変換
  • NCHAR(n)からchar[2n+1]への変換
  • MCHAR(n)からchar[n+1]への変換
文字列の終端にナル文字を付け加え,UAPでの文字列長はSQLの文字列長に1を加えます。

注※2
動的SQLで日付データ(DATE)を検索する場合,DESCRIBE文で取得した検索項目情報のデータコードを文字データ型に,データ長を10バイト以上に設定する必要があります。また,動的SQLで時刻データを検索する場合,DESCRIBE文で取得した検索項目情報のデータコードを文字データ型に,データ長を8バイト以上に設定する必要があります。
動的SQLで時刻印データ(TIMESTAMP)を検索する場合,次のように設定してください。
  • DESCRIBE文で取得した検索項目情報のデータコードは,文字データ型にしてください。
  • pが0の場合は,データ長を19バイト以上にしてください。pが2,4,又は6の場合は,20+pバイト以上にしてください。

注※3
HiRDBサーバとHiRDBクライアントのエンディアンが同じ場合にだけ,ROW型を使用できます。

注※4
BLOBのUAPの記述は,内部的に次のように展開されます。
 
struct{
      long           変数名_reserved;         … 1
      unsigned long  変数名_length;           … 2
      char           変数名_data[m];          … 3
}変数名
  
[説明]
  1. 変数名_reservedは,使用しません。64ビットモードの場合は,int 変数名_reserved;となります。
  2. 変数名_lengthは,BLOBの実際の長さになります。64ビットモードの場合は,unsigned int 変数名_length;となります。
  3. 変数名_data[m]は,BLOBのデータ格納領域(mは実際のデータ長)になります。

注※5
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} ;

注※6
内部的に次のように展開されます。
 
struct{
         short   len;
         char    str[n];
}変数名
 
NVARCHARの場合は,str[2n]になります。

注※7
内部的に次のように展開されます。
 
struct{
         long  len;
         char  str[n];
}変数名
  
なお,64ビットモードの場合,「long len;」は「int len;」になります。

注※8
内部的に次のように展開されます。
 
unsigned long 変数名;
  
なお,64ビットモードの場合,「unsigned long 変数名;」は「unsigned int 変数名;」になります。

注※9
内部的に次のように展開されます。
 
char 変数名[n+1];
 
文字列長は,先頭からNULL文字の一つ前までの長さになります。なお,C言語の文字列を受け取る場合,n+1個の配列要素中にNULL文字がないときは,エラーとなります。

注※10
内部的に次のように展開されます。
 
<プリプロセサの-XU16オプションで型指定子を指定しなかった場合>
 
char 変数名[2n+2];
 
<プリプロセサの-XU16オプションで型指定子を指定した場合>
 
型指定子 変数名[n+1];
 
-XU16オプションについては,「8.2.2 UNIX環境でのプリプロセス」,又は「8.2.3 Windows環境でのプリプロセス」を参照してください。

注※11
内部的に次のように展開されます。
 
<プリプロセサの-XU16オプションで型指定子を指定しなかった場合>
struct{
         short  len;
         char   str[2n];
} 変数名;
   
<プリプロセサの-XU16オプションで型指定子を指定した場合>
 
struct{
         short     len;
         型指定子  str[n];
} 変数名;
   
-XU16オプションについては,「8.2.2 UNIX環境でのプリプロセス」,又は「8.2.3 Windows環境でのプリプロセス」を参照してください。

(2) 配列を使用した場合のSQLのデータ型とC言語のデータ記述

配列を使用した場合のSQLのデータ型とC言語のデータ記述を次の表に示します。

表F-2 配列を使用した場合のSQLのデータ型とC言語のデータ記述

SQLのデータ型 C言語のデータ記述 備  考
SMALLINT short 変数名[m];  
INTEGER long 変数名[m];  
DECIMAL[(p[,s])] SQL TYPE IS DECIMAL(p,s)
変数名[m];
1≦p≦38,0≦s≦p
SMALLFLT,
REAL
float 変数名[m];  
FLOAT
(DOUBLE PRECISION)
double 変数名[m];  
CHAR[(n)]
[CHARACTER SET 文字集合指定]
char
[CHARACTER SET[IS]
文字集合指定]
変数名[m][n+1];
1≦n≦30000
文字集合指定:[MASTER.]EBCDIK
CHAR[(2n)]
CHARACTER SET 文字集合指定
char
CHARACTER SET[IS]
文字集合指定
変数名[m][2n+2];
1≦n≦15000
文字集合指定:[MASTER.]UTF16
SQL TYPE IS CHAR(2n)
CHARACTER SET[IS]
文字集合指定
変数名[m];
VARCHAR(n)
[CHARACTER SET 文字集合指定]
struct {
short 変数名1;
char 変数名2[n];
}[CHARACTER SET[IS]
文字集合指定]
構造体名[m];
1≦n≦32000
文字集合指定:[MASTER.]EBCDIK
SQL TYPE IS VARCHAR(n)
[CHARACTER SET[IS]
文字集合指定]
変数名[m];
VARCHAR
[CHARACTER SET[IS]
文字集合指定]
変数名[m][n+1];
VARCHAR(2n)
CHARACTER SET 文字集合指定
struct {
short 変数名1;
char 変数名2[2n];
} CHARACTER SET[IS]
文字集合指定
構造体名[m];
1≦n≦16000
変数名1:文字列長
変数名2:文字列
文字列長:
バイト数で,2の倍数
文字集合指定:
[MASTER.]UTF16
SQL TYPE IS VARCHAR(n)
CHARACTER SET[IS]
文字集合指定
変数名[m];
VARCHAR
CHARACTER SET[IS]
文字集合指定
変数名[m][2n+2]
NCHAR[(n)] char 変数名[m][2n+1]; 1≦n≦15000
NVARCHAR(n) struct {
short 変数名1;
char 変数名2[2n];
}構造体名[m];
1≦n≦16000
SQL TYPE IS NVARCHAR(n)
変数名[m];
MCHAR[(n)] char 変数名[m][n+1]; 1≦n≦30000
MVARCHAR(n) struct{
short 変数名1;
char 変数名2[n];
}構造体名[m];
1≦n≦32000
SQL TYPE IS MVARCHAR(n)
変数名[m];
DATE char 変数名[m][11];  
TIME char 変数名[m][9];  
TIMESTAMP[(p)] char 変数名[m][n+1]; p=0の場合はn=19
p=2の場合はn=21,22
p=4の場合はn=23,24
p=6の場合はn=25,26
INTERVAL YEAR
TO DAY
SQL TYPE IS DECIMAL(8,0)
変数名[m];
 
INTERVAL HOUR TO SECOND SQL TYPE IS DECIMAL(6,0)
変数名[m];
 
ROW char 変数名[m][n+1]; 1≦n≦30000
BLOB  
BINARY struct {
long 変数名1;
char 変数名2[n];
} 構造体名[m];

  • 配列を使用したFETCHの場合
    4≦n≦2147483644(nは4の倍数であること)
  • 配列を使用したFETCH以外の場合
    4≦n≦32000(nは4の倍数であること)
SQL TYPE IS BINARY(n)
変数名[m];
BLOB位置付け子  
BINARY位置付け子 SQL TYPE IS
BINARY AS LOCATOR
変数名[m];
 
標識変数 BINARY,BINARY位置付け子以外 short 変数名[m];  
BINARY,BINARY位置付け子 long 変数名[m];  
SQL文  

(凡例)
−:記述できません。
m:配列の要素数(1〜4,096)
n:長さ(バイト)
p:精度(全体のけた数)
s:位取り(小数点以下のけた数)

64ビットモードの場合,longの代わりにintを使用してください。

(3) 繰返し列を使用した場合のSQLのデータ型とC言語のデータ記述

繰返し列を使用した場合のSQLのデータ型とC言語のデータ記述を次の表に示します。

表F-3 繰返し列を使用した場合のSQLのデータ型とC言語のデータ記述

SQLのデータ型 C言語のデータ記述 備  考
SMALLINT PD_MV_SINT(m) 変数名;  
INTEGER PD_MV_INT(m) 変数名;  
DECIMAL PD_MV_DEC(m,p,s) 変数名; 1≦p≦38,0≦s≦p
SMALLFLT,
REAL
PD_MV_SFLT(m) 変数名;  
FLOAT
(DOUBLE PRECISION)
PD_MV_FLT(m) 変数名;  
CHAR[(n)] PD_MV_CHAR(m,n) 変数名; 1≦n≦30000
VARCHAR(n) PD_MV_VCHAR(m,n) 変数名; 1≦n≦32000
PD_MV_CVCHAR(m,n) 変数名;
NCHAR[(n)] PD_MV_NCHAR(m,n) 変数名; 1≦n≦15000
NVARCHAR(n) PD_MV_NVCHAR(m,n) 変数名; 1≦n≦16000
MCHAR[(n)] PD_MV_CHAR(m,n) 変数名; 1≦n≦30000
MVARCHAR(n) PD_MV_VCHAR(m,n) 変数名; 1≦n≦32000
DATE PD_MV_CHAR(m,10) 変数名;  
TIME PD_MV_CHAR(m,8) 変数名;  
TIMESTAMP[(p)] PD_MV_CHAR(m,n) 変数名; p=0の場合はn=19
p=2の場合はn=21,22
p=4の場合はn=23,24
p=6の場合はn=25,26
INTERVAL YEAR
TO DAY
PD_MV_DEC(m,8,0) 変数名;  
INTERVAL HOUR TO SECOND PD_MV_DEC(m,6,0) 変数名;  
ROW  
BLOB  
BINARY  
標識変数(BLOB,BINARY,BLOB位置付け子,BINARY位置付け子以外) PD_MV_SINT(m) 変数名;  
SQL文  

(凡例)
−:記述できません。
m:繰返し列の最大要素数(2〜30,000)
n:長さ(バイト)
p:精度(全体のけた数)
s:位取り(小数点以下のけた数)

(4) 埋込み変数の参照・設定に使用するマクロ

繰返し列を使用した場合のSQLのデータ型とC言語のデータ記述では,各データ型の埋込み変数の参照・設定に,専用のマクロを使用します。埋込み変数の参照・設定に使用するマクロを次の表に示します。

表F-4 埋込み変数の参照・設定に使用するマクロ

SQLのデータ型 マクロ名 参照・設定するデータ データ型
SMALLINT PD_MV_SINT_CNT(変数名) 繰返しデータの現在要素数 long
PD_MV_SINT_DATA(変数名,m) 繰返しの各要素 short
INTEGER PD_MV_INT_CNT(変数名) 繰返しデータの現在要素数 long
PD_MV_INT_DATA(変数名,m) 繰返しの各要素 long
DECIMAL[(p[,s])] PD_MV_DEC_CNT(変数名) 繰返しデータの現在要素数 long
PD_MV_DEC_DATA(変数名,m) 繰返しの各要素の10進数の先頭アドレス unsigned
SMALLFLT,
REAL
PD_MV_SFLT_CNT(変数名) 繰返しデータの現在要素数 long
PD_MV_SFLT_DATA(変数名,m) 繰返しの各要素 float
FLOAT
(DOUBLE PRECISION)
PD_MV_FLT_CNT(変数名) 繰返しデータの現在要素数 long
PD_MV_FLT_DATA(変数名,m) 繰返しの各要素 double
CHAR[(n)] PD_MV_CHAR_CNT(変数名) 繰返しデータの現在要素数 long
PD_MV_CHAR_DATA(変数名,m) 繰返しの各要素の,文字列の先頭アドレス char[ ]
VARCHAR(n) PD_MV_VCHAR_CNT(変数名) 繰返しデータの現在要素数 long
PD_MV_VCHAR_LEN(変数名,m) 繰返しの各要素の,文字列の実長 short
PD_MV_VCHAR_STR(変数名,m) 繰返しの各要素の,文字列のアドレス char[ ]
PD_MV_CVCHAR_CNT(変数名) 繰返しデータの現在要素数 long
PD_MV_CVCHAR_DATA(変数名,m) 繰返しの各要素の,文字列のアドレス char[ ]
NCHAR[(n)] PD_MV_NCHAR_CNT(変数名) 繰返しデータの現在要素数 long
PD_MV_NCHAR_DATA(変数名,m) 繰返しの各要素の,文字列の先頭アドレス char[ ]
NVARCHAR(n) PD_MV_NVCHAR_CNT(変数名) 繰返しデータの現在要素数 long
PD_MV_NVCHAR_LEN(変数名,m) 繰返しの各要素の,文字列の実長 short
PD_MV_NVCHAR_STR(変数名,m) 繰返しの各要素の,文字列の先頭アドレス char[ ]
MCHAR[(n)] PD_MV_CHAR_CNT(変数名) 繰返しデータの現在要素数 long
PD_MV_CHAR_DATA(変数名,m) 繰返しの各要素の,文字列の先頭アドレス char[ ]
MVARCHAR(n) PD_MV_VCHAR_CNT(変数名) 繰返しデータの現在要素数 long
PD_MV_VCHAR_LEN(変数名,m) 繰返しの各要素の,文字列の実長 short
PD_MV_VCHAR_STR(変数名,m) 繰返しの各要素の,文字列のアドレス char[ ]
DATE CHAR(10)と同じ
TIME CHAR(8)と同じ
TIMESTAMP[(p)] CHAR(n)と同じ
p=0の場合はn=19
p=2の場合はn=21,22
p=4の場合はn=23,24
p=6の場合はn=25,26
INTERVAL YEAR TO DAY DECIMAL(8,0)と同じ
INTERVAL HOUR TO SECOND DECIMAL(6,0)と同じ
標識変数 PD_MV_SINT_CNT(変数名) 繰返し列全体の標識 long
PD_MV_SINT_DATA(変数名,m) 繰返し列の各要素の標識 short

(凡例)
−:該当しません。
m:繰返し列の各要素を示す番号(0〜m-1)
n:長さ(バイト)
p:精度(全体のけた数)
s:位取り(小数点以下のけた数)

注※
64ビットモードの場合,intとなります。

 

繰返し列用の埋込み変数を参照・設定するマクロの使用例を次に示します。

 
EXEC SQL BEGIN DECLARE SECTION;
char xname[5];
PD_MV_SINT(4) xmten;
PD_MV_CHAR(4,5) xmkamoku;
EXEC SQL END DECLARE SECTION;
         :
strcpy(xname,"山田")
PD_MV_SINT_DATA(xmten,0)=90;
PD_MV_SINT_DATA(xmten,1)=65;
PD_MV_SINT_DATA(xmten,2)=85;
PD_MV_SINT_DATA(xmten,3)=55;
PD_MV_SINT_CNT(xmten)=4;
strcpy(PD_MV_CHAR_DATA(xmkamoku,0),"数学");
strcpy(PD_MV_CHAR_DATA(xmkamoku,1),"国語");
strcpy(PD_MV_CHAR_DATA(xmkamoku,2),"理科");
strcpy(PD_MV_CHAR_DATA(xmkamoku,3),"社会");
PD_MV_CHAR_CNT(xmkamoku)=4;
EXEC SQL
  INSERT INTO 成績表(氏名,科目,成績) VALUES(:xname,:xmkamoku,:xmten);
 

(5) ポインタ変数とC言語のデータ記述

ポインタ変数とC言語のデータ記述を次の表に示します。

表F-5 ポインタ変数とC言語のデータ記述

SQLのデータ型 C言語のデータ記述 備考
SMALLINT short *変数名;  
INTEGER long *変数名;  
DECIMAL[(p[,s])] SQL TYPE IS DECIMAL(p,s)
*変数名;
1≦p≦38,0≦s≦p
SMALLFLT,REAL float *変数名;  
FLOAT
(DOUBLE PRECISION)
double *変数名;  
CHAR[(n)]
[CHARACTER SET 文字集合指定]
char
[CHARACTER SET[IS]
文字集合指定]*変数名;
1≦n≦30000
文字集合指定:[MASTER.]EBCDIK
CHAR[(2n)]
CHARACTER SET 文字集合指定
SQL TYPE IS CHAR(2n)
CHARACTER SET[IS]
文字集合指定 *変数名;
1≦n≦15000
文字集合指定:
[MASTER.]UTF16
VARCHAR(n)
[CHARACTER SET 文字集合指定]
struct {
short 変数名1;
char 変数名2[n];
} [CHARACTER SET[IS]
文字集合指定]*構造体名;
1≦n≦32000
変数名1:文字列長(バイト数)
変数名2:文字列
文字集合指定:[MASTER.]EBCDIK
SQL TYPE IS VARCHAR(n)
[CHARACTER SET[IS]
文字集合指定] *変数名;
VARCHAR
[CHARACTER SET[IS]
文字集合指定] *変数名;
VARCHAR(2n)
CHARACTER SET 文字集合指定
struct {
short 変数名1;
char 変数名2[2n];
} CHARACTER SET[IS]
文字集合指定 *構造体名;
1≦n≦16000
変数名1:文字列長
変数名2:文字列
文字列長:
バイト数で,2の倍数
文字集合指定:
[MASTER.]UTF16
SQL TYPE IS VARCHAR(2n)
CHARACTER SET[IS]
文字集合指定 *変数名;
NCHAR[(n)] char *変数名; 1≦n≦15000
NVARCHAR(n) struct {
short 変数名1;
char 変数名2[2n];
} *構造体名;
1≦n≦16000
変数名1:文字列長(文字数)
変数名2:文字列
SQL TYPE IS NVARCHAR(n)
*変数名;
MCHAR[(n)] char *変数名; 1≦n≦30000
MVARCHAR(n) struct {
short 変数名1;
char 変数名2[n];
} *構造体名;
1≦n≦32000
変数名1:文字列長(バイト数)
変数名2:文字列
SQL TYPE IS MVARCHAR(n)
*変数名;
DATE char *変数名;  
TIME char *変数名;  
TIMESTAMP char *変数名;  
INTERVAL YEAR TO DAY SQL TYPE IS DECIMAL(8,0)
*変数名;
 
INTERVAL HOUR TO SECOND SQL TYPE IS DECIMAL(6,0)
*変数名;
 
ROW char *変数名; 1≦全体長≦30000
BLOB SQL TYPE IS
BLOB(n[{K|M|G}])
*変数名;
単位を省略した場合:
1≦n≦2147483647
単位がKの場合:
1≦n≦2097152
単位がMの場合:
1≦n≦2048
単位がGの場合:
1≦n≦2
BINARY(n) struct {
long 変数名1;
char 変数名2[n];
} *構造体名;
1≦n≦2147483647
SQL TYPE IS BINARY(n)
*変数名;
BLOB位置付け子 SQL TYPE IS
BLOB AS LOCATOR
*変数名;
 
BINARY位置付け子 SQL TYPE IS
BINARY AS LOCATOR
*変数名;
 
標識変数 BLOB,BINARY,BLOB位置付け子,BINARY位置付け子以外 short *変数名;  
BLOB,BINARY,BLOB位置付け子,BINARY位置付け子 long *変数名;
SQL文 struct {
long 変数名1;
char 変数名2[n];
} *構造体名;
1≦n≦2000000
SMALLINT ARRAY m PD_MV_SINT(m)
*変数名;
 
INTEGER ARRAY m PD_MV_INT(m)
*変数名;
 
DECIMAL[(p[,s])] ARRAY m PD_MV_DEC(m,p,s)
*変数名;
1≦p≦38,0≦s≦p
SMALLFLT ARRAY m
(REAL)
PD_MV_SFLT(m)
*変数名;
 
FLOAT ARRAY m
(DOUBLE PRECISION)
PD_MV_FLT(m)
*変数名;
 
CHAR[(n)] ARRAY m,及び
MCHAR[(n)] ARRAY m
PD_MV_CHAR(m,n)
*変数名;
1≦n≦30000
VARCHAR[(n)] ARRAY m,及びMVARCHAR[(n)] ARRAY m PD_MV_VCHAR(m,n)
*変数名;
1≦n≦32000
PD_MV_CVCHAR(m,n)
*変数名;
NCHAR[(n)] ARRAY m PD_MV_NCHAR(m,n)
*変数名;
1≦n≦15000
NVARCHAR[(n)] ARRAY m PD_MV_NVCHAR(m,n)
*変数名;
1≦n≦16000
DATE ARRAY m PD_MV_CHAR(m,10)
*変数名;
 
TIME ARRAY m PD_MV_CHAR(m,8)
*変数名;
 
TIMESTAMP ARRAY m PD_MV_CHAR(m,n)
*変数名;
p=0の場合はn=19
p=2の場合はn=21,22
p=4の場合はn=23,24
p=6の場合はn=25,26
INTERVAL YEAR TO DAY ARRAY m PD_MV_DEC(m,8,0)
*変数名;
 
INTERVAL HOUR TO SECOND ARRAY m PD_MV_DEC(m,6,0)
*変数名;
 
繰返し列用標識変数 PD_MV_SINT(m)
*変数名;
 

(凡例)
m:繰返し列の各要素を示す番号(0〜m-1)
n:長さ(バイト)
p:精度(全体のけた数)
s:位取り(小数点以下のけた数)

64ビットモードの場合,longの代わりにintを使用してください。

注※
プリプロセス時に領域の定義長が決定できないため,実行時にポインタが指す領域に格納されている文字列の長さを,strlen(変数名)で求めて,領域長の代わりに使用します。検索結果を受け取る場合は,ポインタが指す領域をNULL文字以外でクリアして,最後にNULL文字を入れてください。

(6) ポインタ型の繰返し列用のマクロ

ポインタ型の繰返し列用の変数を参照,及び設定するには,専用のマクロを使用します。ポインタ型の繰返し列用のマクロを次の表に示します。

表F-6 ポインタ型の繰返し列用のマクロ

SQLのデータ型 マクロ名 参照・設定するデータ データ型
SMALLINT ARRAY m PD_MV_SINTP_CNT(変数名) 繰返しデータの現在要素数 long
PD_MV_SINTP_DATA(変数名,m) 繰返しの各要素 short
INTEGER ARRAY m PD_MV_INTP_CNT(変数名) 繰返しデータの現在要素数 long
PD_MV_INTP_DATA(変数名,m) 繰返しの各要素 long
DECIMAL[(p[,s])] ARRAY m PD_MV_DECP_CNT(変数名) 繰返しデータの現在要素数 long
PD_MV_DECP_DATA(変数名,m) 繰返しの各要素の10進数の先頭アドレス char[ ]
SMALLFLT ARRAY m
(REAL)
PD_MV_SFLTP_CNT(変数名) 繰返しデータの現在要素数 long
PD_MV_SFLTP_DATA(変数名,m) 繰返しの各要素 float
FLOAT ARRAY m
(DOUBLE PRECISION)
PD_MV_FLTP_CNT(変数名) 繰返しデータの現在要素数 long
PD_MV_FLTP_DATA(変数名,m) 繰返しの各要素 double
CHAR[(n)] ARRAY m,又はMCHAR[(n)] ARRAY m PD_MV_CHARP_CNT(変数名) 繰返しデータの現在要素数 long
PD_MV_CHARP_DATA(変数名,m) 繰返しの各要素の,文字列の先頭アドレス char[ ]
VARCHAR(n) ARRAY m,又はMVARCHAR(n) ARRAY m PD_MV_VCHARP_CNT(変数名) 繰返しデータの現在要素数 long
PD_MV_VCHARP_LEN(変数名,m) 繰返しの各要素の,文字列の実長 short
PD_MV_VCHARP_STR(変数名,m) 繰返しの各要素の,文字列のアドレス char[ ]
PD_MV_CVCHARP_CNT(変数名) 繰返しデータの現在要素数 long
PD_MV_CVCHARP_DATA(変数名,m) 繰返しの各要素の,文字列のアドレス char[ ]
NCHAR[(n)] ARRAY m PD_MV_NCHARP_CNT(変数名) 繰返しデータの現在要素数 long
PD_MV_NCHARP_DATA(変数名,m) 繰返しの各要素の,文字列の先頭アドレス char[ ]
NVARCHAR(n) ARRAY m PD_MV_NVCHARP_CNT(変数名) 繰返しデータの現在要素数 long
PD_MV_NVCHARP_LEN(変数名,m) 繰返しの各要素の,文字列の実長 short
PD_MV_NVCHARP_STR(変数名,m) 繰返しの各要素の,文字列の先頭アドレス char[ ]
DATE ARRAY m CHAR(10)と同じ
TIME ARRAY m CHAR(8)と同じ
TIMESTAMP[(p)] ARRAY m CHAR(n)と同じ
p=0の場合はn=19
p=2の場合はn=21,22
p=4の場合はn=23,24
p=6の場合はn=25,26
INTERVAL YEAR TO DAY DECIMAL(8,0)と同じ
INTERVAL HOUR TO SECOND DECIMAL(6,0)と同じ
標識変数 PD_MV_SINTP_CNT(変数名) 繰返し列全体の標識 long
PD_MV_SINTP_DATA(変数名,m) 繰返し列の各要素の標識 short

(凡例)
−:該当しません。
m:繰返し列の各要素を示す番号(0〜m-1)
n:長さ(バイト)
p:精度(全体のけた数)
s:位取り(小数点以下のけた数)

注※
64ビットモードの場合,intとなります。

(7) 一括指定用の構造体

一括指定用の構造体を次の表に示します。

表F-7 一括指定用の構造体

SQLのデータ型 C言語のデータ記述 項目の記述 備考
複数の項目 表F-1〜表F-3のデータ型をメンバとして含む構造体 複数の埋込み変数を一括指定します。 ポインタ宣言ができます。
複数の項目用の標識変数 表F-1〜表F-3の標識変数をメンバとして含む構造体 複数の標識変数を一括指定します。 ポインタ宣言ができます。