プログラムとデータベースサーバー間で情報を転送するには、それぞれのデータについてデータ型を設定します。Embedded SQL データ型定数の前には DT_ が付けられ、sqldef.h ヘッダーファイル内にあります。ホスト変数はサポートされるどのデータ型についても作成できます。これらのデータ型は、データをデータベースと受け渡しするために SQLDA 構造体で使用することもできます。
これらのデータ型の変数を定義するには、sqlca.h にリストされている DECL_ マクロを使用します。たとえば、変数が BIGINT 値を保持する場合は DECL_BIGINT と宣言できます。
次のデータ型が、Embedded SQL プログラミングインターフェイスでサポートされます。
DT_DECIMAL パック 10 進数 (独自フォーマット)
typedef struct TYPE_DECIMAL { char array[1]; } TYPE_DECIMAL; |
DT_STRING CHAR 文字セット内の NULL で終了する文字列。データベースがブランクを埋め込まれた文字列で初期化されると、文字列にブランクが埋め込まれます。
DT_NSTRING NCHAR 文字セット内の NULL で終了する文字列。データベースがブランクを埋め込まれた文字列で初期化されると、文字列にブランクが埋め込まれます。
DT_FIXCHAR CHAR 文字セット内のブランクが埋め込まれた固定長文字列。最大長は 32767 で、バイト単位で指定します。データは、NULL で終了しません。
DT_NFIXCHAR NCHAR 文字セット内のブランクが埋め込まれた固定長文字列。最大長は 32767 で、バイト単位で指定します。データは、NULL で終了しません。
DT_VARCHAR CHAR 文字セット内の 2 バイトの長さフィールドを持つ可変長文字列。最大長は 32765 バイトです。データを送信する場合は、長さフィールドに値を設定してください。データをフェッチする場合は、データベースサーバーが長さフィールドに値を設定します。データは NULL で終了せず、ブランクも埋め込まれません。
typedef struct VARCHAR { a_sql_ulen len; char array[1]; } VARCHAR; |
DT_NVARCHAR NCHAR 文字セット内の 2 バイトの長さフィールドを持つ可変長文字列。最大長は 32765 バイトです。データを送信する場合は、長さフィールドに値を設定してください。データをフェッチする場合は、データベースサーバーが長さフィールドに値を設定します。データは NULL で終了せず、ブランクも埋め込まれません。
typedef struct NVARCHAR { a_sql_ulen 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 { a_sql_ulen 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 の文字配列のため、ホスト変数の宣言には向いていません。しかし、動的な変数の割り付けや他の変数の型変換を行うのには有効です。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |