機能
ホストプログラムとしてC言語を使用するために必要な各種の定義を行います。
記述形式
参照項番
埋込みSQL文 → “6.1 Embedded SQL文(埋込みSQL文)”
INCLUDE文 → “6.2 INCLUDE文”
一般規則
SQL埋込みCプログラムの関数名は、“SQL”以外で始まる名前とします。これらは、英大文字を等価な英小文字に置き換えた場合にも同じです。
C文字変数およびVARCHAR変数の長さは、2以上を指定することが必要です。
C文字変数およびVARCHAR変数の長さは、“データ長+1”と記述することもできます。
C文字型のポインタ宣言が参照する領域の長さは、NULL文字までの長さになります。
VARCHAR型のポインタ変数が参照する領域の長さは、コンパイル時に展開された構造体のメンバ“sqllen”に設定してください。
BLOB型のポインタ変数が参照する領域の長さは、コンパイル時に展開された構造体のメンバ“変数名_length” に設定してください。
C数値型のポインタ変数が参照する領域の長さは、ポインタ変数の型の長さになります。
C構造体変数を定義する場合に、メンバとして構造体を指定することはできません。
Cテキストは、C言語の文法規則に準拠します。
SQL埋込みCプログラムは、CテキストおよびSQLテキストからなるコンパイル単位とします。Cテキストは、C言語の文法規則に準拠します。SQLテキストは、1つ以上の省略可能な埋込みSQL宣言節と、1つ以上の埋込みSQL文から構成されます。
Cホスト識別子は、C言語で規定される変数名です。ただし、変数名が日本語文字でない場合以下を満たすことが必要です。
“SQL”以外で始まる変数名とします。これらは、英大文字を等価な英小文字に置き換えた場合にも同じです。
SQLのデータ型と対応するC変数定義を以下に示します。
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; (注9) unsigned long 変数名_length; (注9) char 変数名_data[n*1024]; } 変数名
注8) BLOB型のポインタ変数の場合、コンパイル時に以下の構造体に展開されます。
struct 変数名_SQLBLOB{ long 変数名_reserved; (注9) unsigned long 変数名_length; (注9) char 変数名_data[1]; } *変数名
注9) 64ビットのSQL埋込みCプログラムの場合、longはintに展開されます。
SQLの時間隔型と対応するC変数定義を以下に示します。
時間隔型 | C変数定義 | |
---|---|---|
年月型 | INTERVAL YEAR[(n)] TO MONTH | char 変数名[n+5] |
INTERVAL YEAR[(n)] | char 変数名[n+2] | |
INTERVAL MONTH[(n)] | char 変数名[n+2] | |
日時型 | 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] | |
INTERVAL HOUR[(n)] TO MINUTE | char 変数名[n+5] | |
INTERVAL HOUR[(n)] TO SECOND | char 変数名[n+8] | |
INTERVAL HOUR[(n)] | char 変数名[n+2] | |
INTERVAL MINUTE[(n)] TO SECOND | char 変数名[n+5] | |
INTERVAL MINUTE[(n)] | char 変数名[n+2] | |
INTERVAL SECOND[(n)] | char 変数名[n+2] |
n: 桁数(1~9)
注10) 位取り0の真数型が指定可能なので、以下のデータ型も指定できます。
short 変数名 (n< 5の場合)
注11) 64ビットのSQL埋込みCプログラムの場合、対応するC変数定義はintです。