Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - プログラミング » SQL Anywhere データ・アクセス API » SQL Anywhere Embedded SQL

 

Embedded SQL のデータ型

プログラムとデータベース・サーバ間で情報を転送するには、それぞれのデータについてデータ型を設定します。Embedded SQL データ型定数の前には DT_ が付けられ、sqldef.h ヘッダ・ファイル内にあります。ホスト変数はサポートされるどのデータ型についても作成できます。これらのデータ型は、データをデータベースと受け渡しするために SQLDA 構造体で使用することもできます。

これらのデータ型の変数を定義するには、sqlca.h にリストされている DECL_ マクロを使用します。たとえば、変数が BIGINT 値を保持する場合は DECL_BIGINT と宣言できます。

次のデータ型が、Embedded SQL プログラミング・インタフェースでサポートされます。

  • DT_BIT   8 ビット符号付き整数

  • DT_SMALLINT   16 ビット符号付き整数

  • DT_UNSSMALLINT   16 ビット符号なし整数

  • DT_TINYINT   8 ビット符号付き整数

  • DT_BIGINT   64 ビット符号付き整数

  • DT_UNSBIGINT   64 ビット符号なし整数

  • DT_INT   32 ビット符号付き整数

  • DT_UNSINT   32 ビット符号なし整数

  • DT_FLOAT   4 バイト浮動小数点数

  • DT_DOUBLE   8 バイト浮動小数点数

  • DT_DECIMAL   パック 10 進数 (独自フォーマット)
    typedef struct TYPE_DECIMAL {
      char array[1];
    } TYPE_DECIMAL;

  • DT_STRING   CHAR 文字セット内の NULL で終了する文字列。データベースがブランクを埋め込まれた文字列で初期化されると、文字列にブランクが埋め込まれます。

  • DT_NSTRING   NCHAR 文字セット内の NULL で終了する文字列。データベースがブランクを埋め込まれた文字列で初期化されると、文字列にブランクが埋め込まれます。

  • DT_DATE   有効な日付データを含み、NULL で終了する文字列

  • DT_TIME   有効な時間データを含み、NULL で終了する文字列

  • DT_TIMESTAMP   有効なタイムスタンプを含み、NULL で終了する文字列

  • DT_FIXCHAR   CHAR 文字セット内のブランクが埋め込まれた固定長文字列。最大長は 32767 で、バイト単位で指定します。データは、NULL で終了しません。

  • DT_NFIXCHAR   NCHAR 文字セット内のブランクが埋め込まれた固定長文字列。最大長は 32767 で、バイト単位で指定します。データは、NULL で終了しません。

  • DT_VARCHAR   CHAR 文字セット内の 2 バイトの長さフィールドを持つ可変長文字列。最大長は 32765 バイトです。データを送信する場合は、長さフィールドに値を設定してください。データをフェッチする場合は、データベース・サーバが長さフィールドに値を設定します。データは NULL で終了せず、ブランクも埋め込まれません。
    typedef struct VARCHAR {
       unsigned short int len;
       char               array[1];
    } VARCHAR;

  • DT_NVARCHAR   NCHAR 文字セット内の 2 バイトの長さフィールドを持つ可変長文字列。最大長は 32765 バイトです。データを送信する場合は、長さフィールドに値を設定してください。データをフェッチする場合は、データベース・サーバが長さフィールドに値を設定します。データは NULL で終了せず、ブランクも埋め込まれません。
    typedef struct NVARCHAR {
       unsigned short int len;
       char               array[1];
    } NVARCHAR;

  • DT_LONGVARCHAR   CHAR 文字セット内の長い可変長文字列
    typedef struct LONGVARCHAR {
     a_sql_uint32 array_len;  /* number of allocated bytes in array */
     a_sql_uint32 stored_len; /* number of bytes stored in array
                               * (never larger than array_len) */
     a_sql_uint32 untrunc_len;/* number of bytes in untruncated expression
                               * (may be larger than array_len) */
     char  array[1];          /* the data */
    } LONGVARCHAR, LONGNVARCHAR, LONGBINARY;

    32767 バイトを超えるデータには、LONGVARCHAR 構造体を使用できます。このように大きいデータの場合は、全体を一度にフェッチする方法と、GET DATA 文を使用して分割してフェッチする方法があります。また、サーバに対しても、全体を一度に送信する方法と、SET 文を使用してデータベース変数に追加することで分割して送信する方法があります。データは NULL で終了せず、ブランクも埋め込まれません。

    詳細については、長い値の送信と取り出しを参照してください。

  • DT_LONGNVARCHAR   NCHAR 文字セット内の長い可変長文字列。マクロによって、構造体が次のように定義されます。
    typedef struct LONGVARCHAR {
     a_sql_uint32 array_len;  /* number of allocated bytes in array */
     a_sql_uint32 stored_len; /* number of bytes stored in array
                               * (never larger than array_len) */
     a_sql_uint32 untrunc_len;/* number of bytes in untruncated expression
                               * (may be larger than array_len) */
     char  array[1];          /* the data */
    } LONGVARCHAR, LONGNVARCHAR, LONGBINARY;

    32767 バイトを超えるデータには、LONGNVARCHAR 構造体を使用できます。このように大きいデータの場合は、全体を一度にフェッチする方法と、GET DATA 文を使用して分割してフェッチする方法があります。また、サーバに対しても、全体を一度に送信する方法と、SET 文を使用してデータベース変数に追加することで分割して送信する方法があります。データは NULL で終了せず、ブランクも埋め込まれません。

    詳細については、長い値の送信と取り出しを参照してください。

  • DT_BINARY   2 バイトの長さフィールドを持つ可変長バイナリ・データ。最大長は 32765 バイトです。データベース・サーバに情報を渡す場合は、長さフィールドを設定してください。データベース・サーバから情報をフェッチする場合は、サーバが長さフィールドを設定します。
    typedef struct BINARY {
      unsigned short int len;
      char array[1];
    } BINARY;

  • DT_LONGBINARY   長いバイナリ・データ。マクロによって、構造体が次のように定義されます。
    typedef struct LONGVARCHAR {
     a_sql_uint32 array_len;  /* number of allocated bytes in array */
     a_sql_uint32 stored_len; /* number of bytes stored in array
                               * (never larger than array_len) */
     a_sql_uint32 untrunc_len;/* number of bytes in untruncated expression
                               * (may be larger than array_len) */
     char  array[1];          /* the data */
    } LONGVARCHAR, LONGNVARCHAR, LONGBINARY;

    32767 バイトを超えるデータには、LONGBINARY 構造体を使用できます。このように大きいデータの場合は、全体を一度にフェッチする方法と、GET DATA 文を使用して分割してフェッチする方法があります。また、サーバに対しても、全体を一度に送信する方法と、SET 文を使用してデータベース変数に追加することで分割して送信する方法があります。

    詳細については、長い値の送信と取り出しを参照してください。

  • DT_TIMESTAMP_STRUCT   タイムスタンプの各部分に対応するフィールドを持つ SQLDATETIME 構造体
    typedef struct sqldatetime {
     unsigned short year; /* for example 1999 */
     unsigned char month; /* 0-11 */
     unsigned char day_of_week; /* 0-6 0=Sunday */
     unsigned short day_of_year; /* 0-365 */
     unsigned char day; /* 1-31 */
     unsigned char hour; /* 0-23 */
     unsigned char minute; /* 0-59 */
     unsigned char second; /* 0-59 */
     unsigned long microsecond; /* 0-999999 */
    } SQLDATETIME;

    SQLDATETIME 構造体は、型が DATE、TIME、TIMESTAMP (または、いずれかの型に変換できるもの) のフィールドを取り出すのに使用できます。アプリケーションは、日付に関して独自のフォーマットで処理をすることがありますが、この構造体を使ってデータをフェッチすると、以後の操作が簡単になります。この構造体の中のデータをフェッチすると、プログラマはこのデータを簡単に操作できます。また、型が DATE、TIME、TIMESTAMP のフィールドは、文字型であれば、どの型でもフェッチと更新が可能です。

    SQLDATETIME 構造体を介してデータベースに日付、時刻、またはタイムスタンプを入力しようとすると、day_of_year と day_of_week メンバは無視されます。

    次の項を参照してください。

  • DT_VARIABLE   NULL で終了する文字列。文字列は SQL 変数名です。その変数の値をデータベース・サーバが使用します。このデータ型はデータベース・サーバにデータを与えるときにだけ使用されます。データベース・サーバからデータをフェッチするときには使用できません。

これらの構造体は sqlca.h ファイルに定義されています。VARCHAR、NVARCHAR、BINARY、DECIMAL、LONG の各データ型は、データ格納領域が長さ 1 の文字配列のため、ホスト変数の宣言には向いていません。しかし、動的な変数の割り付けや他の変数の型変換を行うのには有効です。

データベースの DATE 型と TIME 型

データベースのさまざまな DATE 型と TIME 型に対応する、Embedded SQL インタフェースのデータ型はありません。これらの型はすべて SQLDATETIME 構造体または文字列を使用してフェッチと更新を行います。

詳細については、GET DATA 文 [ESQL]SET 文を参照してください。