ページの先頭行へ戻る
Symfoware Server V10.0.0/V10.0.1 アプリケーション開発ガイド(埋込みSQL編)

付録E SQLのデータ型と対応するホスト変数のデータ型

SQLのデータ型と対応するCホスト変数のデータ型を以下に示します。

表E.1 SQLのデータ型と対応するCホスト変数のデータ型

SQLデータ型

C変数定義

文字列型

CHARACTER(n)

char 変数名[n+1]
char * 変数名[n+1] (注1)

CHARACTER VARYING(n)

VARCHAR 変数名[n+1] (注2)
VARCHAR * 変数名[n+1] (注1)(注3)

各国語
文字列型

NATIONAL CHARACTER(n)

char CHARACTER SET[IS]
NCHAR 変数名[n*2+1]
char CHARACTER SET[IS]
NCHAR * 変数名 (注1)

NATIONAL CHARACTER VARYING(n)

VARCHAR CHARACTER SET[IS]NCHAR
変数名[n*2+1] (注2)
VARCHAR CHARACTER SET[IS]NCHAR
* 変数名 (注1)(注3)

真数型

NUMERIC(p,q)

NUMERIC(p,q) 変数名 (注4)
NUMERIC(p,q) * 変数名 (注1)

DECIMAL(p,q)

DECIMAL(p,q) 変数名 (注5)
DECIMAL(p,q) * 変数名 (注1)

SMALLINT

short 変数名
short * 変数名 (注1)

INTEGER

long 変数名 (注6)
long * 変数名 (注1)

概数型

REAL

float 変数名
float * 変数名 (注1)

DOUBLE PRECISION

double 変数名
double * 変数名 (注1)

日時型

DATE

char 変数名[11]

TIME

char 変数名[9]

TIMESTAMP

char 変数名[20]

時間隔型

INTERVAL

表E.2 時間隔型と対応するCホスト変数のデータ型”参照

BLOB型

BINARY LARGE OBJECT(n単位)

SQL TYPE IS BLOB(n単位) 変数名 (注7)
SQL TYPE IS BLOB * 変数名 (注1) (注8)

ROW_ID

ROW_ID

ROW_ID 変数名
ROW_ID * 変数名 (注1)

n:長さ、p:精度、q:位取り、単位:K(キロバイト)、 M(メガバイト)、G(ギガバイト)

注1) 各型のポインタ変数を宣言する場合は、変数名の前に*を指定します。

注2) 可変長文字列の場合、コンパイル時に以下の構造体に展開されます。

struct {
    short sqllen; 
    char sqlvar[n+1];
} 変数名

注3) 可変長文字列のポインタ変数の場合、コンパイル時に以下の構造体に展開されます。

struct 変数名_SQLVAR{
    short sqllen; 
    char sqlvar[1];
} *変数名

注4) NUMERIC型の場合、コンパイル時に以下のように展開されます。

char 変数名 [p+1];

注5) DECIMAL型の場合、コンパイル時に以下のように展開されます。

char 変数名 [(p÷2)+1];

注6) 64ビットのSQL埋込みCプログラムの場合、対応するC変数定義はintです。

注7) BLOB型の場合、コンパイル時に以下の構造体に展開されます。

struct {
    long 変数名_reserved; 注)
    unsigned long 変数名_length; 注)
    char 変数名_data[n*1024];
} 変数名 

注8) BLOB型のポインタ変数の場合、コンパイル時に以下の構造体に展開されます。

struct 変数名_SQLBLOB{
    long 変数名_reserved; 注)
    unsigned long 変数名_length;
    char 変数名_data[1];
} *変数名

注)64ビットのSQL埋込みCプログラムの場合、longはintに展開されます。


時間隔型と対応するCホスト変数のデータ型を以下に示します。

表E.2 時間隔型と対応するCホスト変数のデータ型

時間隔型

C変数定義

年月型

INTERVAL YEAR[(n)] TO MONTH

char 変数名[n+5]

INTERVAL YEAR[(n)]

char 変数名[n+2]
long 変数名 (注)

INTERVAL MONTH[(n)]

char 変数名[n+2]
long 変数名 (注)

日時型

INTERVAL DAY[(n)] TO HOUR

char 変数名[n+5]

INTERVAL DAY[(n)] TO MINUTE

char 変数名[n+8]

INTERVAL DAY[(n)] TO SECOND

char 変数名[n+11]

INTERVAL DAY[(n)]

char 変数名[n+2]
long 変数名 (注)

INTERVAL HOUR[(n)] TO MINUTE

char 変数名[n+5]

INTERVAL HOUR[(n)] TO SECOND

char 変数名[n+8]

INTERVAL HOUR[(n)]

char 変数名[n+2]
long 変数名 (注)

INTERVAL MINUTE[(n)] TO SECOND

char 変数名[n+5]

INTERVAL MINUTE[(n)]

char 変数名[n+2]
long 変数名 (注)

INTERVAL SECOND[(n)]

char 変数名[n+2]
long 変数名 (注)

n:桁数(1~9)

注) 位取り0の真数型が指定可能なので、以下のデータ型も指定できます。

short 変数名 ( n<5の場合 )

SQLのデータ型と対応するCOBOLホスト変数のデータ型を以下に示します。

表E.3 SQLのデータ型と対応するCOBOLホスト変数のデータ型

SQLデータ型

COBOL変数定義

文字列型

CHARACTER(n)

01 変数名 PIC X(n).

CHARACTER VARYING(n)

01 変数名-1.
49 変数名-2 PIC S9({4|9}) {BINARY|COMP}.
49 変数名-3 PIC X(n).

各国語
文字列型

NATIONAL CHARACTER(n)

01 変数名 PIC N(n).

NATIONAL CHARACTER VARYING(n)

01 変数名-1.
49 変数名-2 PIC S9({4|9}) {BINARY|COMP}.
49 変数名-3 PIC N(n).

真数型

NUMERIC(p,q)

01 変数名 PIC S9(p-q)V9(q) DISPLAY [SIGN] {LEADING SEPARATE [CHARACTER]|TRAILING}.

DECIMAL(p,q)

01 変数名 PIC S9(p-q)V9(q) {PACKED-DECIMAL|COMP-3}.

SMALLINT

01 変数名 PIC S9(4) {BINARY|COMP}.

INTEGER

01 変数名 PIC S9(9) {BINARY|COMP}.

概数型

REAL

01 変数名 COMP-1.

DOUBLE PRECISION

01 変数名 COMP-2.

日時型

DATE

01 変数名 PIC X(10).

TIME

01 変数名 PIC X(8).

TIMESTAMP

01 変数名 PIC X(19).

時間隔型

INTERVAL

表E.4 時間隔型と対応するCOBOLホスト変数のデータ型”参照

BLOB型

BINARY LARGE OBJECT(n単位)

01 変数名 SQL TYPE IS BLOB(n単位). (注)

ROW_ID

ROW_ID

01 変数名 ROW_ID.

n:長さ、p:精度、q:位取り、単位:K(キロバイト)、M(メガバイト)、G(ギガバイト)

注) BLOB型の場合、コンパイル時に以下の構造体に展開されます(単位がKの場合)。

01 変数名. 
    49 変数名-RESERVED PIC S9(9) USAGE IS BINARY. 
    49 変数名-LENGTH PIC S9(9) USAGE IS BINARY. 
    49 変数名-DATA PIC X(n*1024). 

時間隔型と対応するCOBOLホスト変数のデータ型を以下に示します。

表E.4 時間隔型と対応するCOBOLホスト変数のデータ型

時間隔型

COBOL変数定義

年月型

INTERVAL YEAR[(n)] TO MONTH

01 変数名 PIC X(n+4).

INTERVAL YEAR[(n)]

01 変数名 PIC X(n+1).
01 変数名 PIC S9(9) {BINARY|COMP}. (注)

INTERVAL MONTH[(n)]

01 変数名 PIC X(n+1).
01 変数名 PIC S9(9) {BINARY|COMP}. (注)

日時型

INTERVAL DAY[(n)] TO HOUR

01 変数名 PIC X(n+4).

INTERVAL DAY[(n)] TO MINUTE

01 変数名 PIC X(n+7).

INTERVAL DAY[(n)] TO SECOND

01 変数名 PIC X(n+10).

INTERVAL DAY[(n)]

01 変数名 PIC X(n+1).
01 変数名 PIC S9(9) {BINARY|COMP}. (注)

INTERVAL HOUR[(n)] TO MINUTE

01 変数名 PIC X(n+4).

INTERVAL HOUR[(n)] TO SECOND

01 変数名 PIC X(n+7).

INTERVAL HOUR[(n)]

01 変数名 PIC X(n+1).
01 変数名 PIC S9(9) {BINARY|COMP}. (注)

INTERVAL MINUTE[(n)] TO SECOND

01 変数名 PIC X(n+4).

INTERVAL MINUTE[(n)]

01 変数名 PIC X(n+1).
01 変数名 PIC S9(9) {BINARY|COMP}. (注)

INTERVAL SECOND[(n)]

01 変数名 PIC X(n+1).
01 変数名 PIC S9(9) {BINARY|COMP}. (注)

n:桁数(1~9)

注) 位取り0の真数型が指定可能なので、以下のデータ型も指定できます。

01 変数名 PIC S9(n) DISPLAY [SIGN] {LEADING SEPARATE [CHARACTER]|TRAILING}. 
01 変数名 PIC S9(n) {PACKED-DECIMAL|COMP-3}.
01 変数名 PIC S9(4) {BINARY|COMP}. ( n<5の場合 )