Hitachi

ノンストップデータベース HiRDB Version 10 UAP開発ガイド


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

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

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

〈この項の構成〉

(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

ROW※3

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 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オプションについては,「UNIX環境でのプリプロセス」,又は「Windows環境でのプリプロセス」を参照してください。

注※11

内部的に次のように展開されます。

<プリプロセサの-XU16オプションで型指定子を指定しなかった場合>
 
struct{
         short  len;
         char   str[2n];
} 変数名;
   
<プリプロセサの-XU16オプションで型指定子を指定した場合>
 
struct{
         short     len;
         型指定子  str[n];
} 変数名;

-XU16オプションについては,「UNIX環境でのプリプロセス」,又は「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の標識変数をメンバとして含む構造体

複数の標識変数を一括指定します。

ポインタ宣言ができます。