ページの先頭行へ戻る
Symfoware Server V11.0.x SQLリファレンス
Symfoware

6.3 SQL埋込みCプログラム

機能

ホストプログラムとしてC言語を使用するために必要な各種の定義を行います。

記述形式

C数値変数

C文字変数

VARCHAR変数

C BLOB変数

C ROW_ID変数

C NUMERIC変数

C DECIMAL変数

C 構造体変数

SQLDA構造体変数

構文の構成

参照項番

一般規則

埋込みSQL宣言節
  • 埋込みSQL宣言節は、C言語の変数宣言が記述可能な箇所に記述します。

  • 埋込みSQL宣言節で宣言される変数名は、コンパイル単位内で一意であることが必要です。

CテキストおよびSQLテキスト
  • Cテキストは、C言語の文法規則に準拠します。

  • SQL埋込みCプログラムは、CテキストおよびSQLテキストからなるコンパイル単位とします。Cテキストは、C言語の文法規則に準拠します。SQLテキストは、1つ以上の省略可能な埋込みSQL宣言節と、1つ以上の埋込みSQL文から構成されます。

Cホスト識別子
  • Cホスト識別子は、C言語で規定される変数名です。ただし、変数名が日本語文字でない場合以下を満たすことが必要です。

    • “SQL”以外で始まる変数名とします。これらは、英大文字を等価な英小文字に置き換えた場合にも同じです。

C変数定義
  • SQLのデータ型と対応するC変数定義を以下に示します。

    表6.1 SQLのデータ型と対応するC変数定義

    SQLデータ型

    C変数定義

    文字列型

    CHARACTER(n)

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

    CHARACTER VARYING(n)

    VARCHAR 変数名[n+1](注2)
    VARCHAR *変数名(注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]
    (注1)
    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

    表6.2 SQLの時間隔型と対応する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; (注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変数定義を以下に示します。

    表6.2 SQLの時間隔型と対応するC変数定義

    時間隔型

    C変数定義

    年月型

    INTERVAL YEAR[(n)] TO MONTH

    char 変数名[n+5]

    INTERVAL YEAR[(n)]

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

    INTERVAL MONTH[(n)]

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

    日時型

    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 変数名 (注10)(注11)

    INTERVAL HOUR[(n)] TO MINUTE

    char 変数名[n+5]

    INTERVAL HOUR[(n)] TO SECOND

    char 変数名[n+8]

    INTERVAL HOUR[(n)]

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

    INTERVAL MINUTE[(n)] TO SECOND

    char 変数名[n+5]

    INTERVAL MINUTE[(n)]

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

    INTERVAL SECOND[(n)]

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

    n: 桁数(1~9)

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

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

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