Embedded SQL アプリケーションで LONG VARCHAR、LONG NVARCHAR、LONG BINARY の値を送信し、取り出す方法は、他のデータ型とは異なります。標準的な SQLDA フィールドのデータ長は 32767 バイトに制限されています。これは、長さの情報を保持するフィールド (sqldata、sqllen、sqlind) が 16 ビット値であるためです。これらの値を 32 ビット値に変更すると、既存のアプリケーションが中断します。
LONG VARCHAR、LONG NVARCHAR、LONG BINARY の値の記述方法は、他のデータ型の場合と同じです。
値の取り出し方法と送信方法については、LONG データの取り出しとLONG データの送信を参照してください。
データ型 LONG BINARY、LONG VARCHAR、LONG NVARCHAR の割り付けられた長さ、格納された長さ、トランケートされていない長さを保持するには、別々のフィールドが使用されます。静的 SQL データ型は、sqlca.h に次のように定義されています。
#define DECL_LONGVARCHAR( size ) \ struct { a_sql_uint32 array_len; \ a_sql_uint32 stored_len; \ a_sql_uint32 untrunc_len; \ char array[size+1];\ } #define DECL_LONGNVARCHAR( size ) \ struct { a_sql_uint32 array_len; \ a_sql_uint32 stored_len; \ a_sql_uint32 untrunc_len; \ char array[size+1];\ } #define DECL_LONGBINARY( size ) \ struct { a_sql_uint32 array_len; \ a_sql_uint32 stored_len; \ a_sql_uint32 untrunc_len; \ char array[size]; \ } |
動的 SQL の場合は、sqltype フィールドを必要に応じて DT_LONGVARCHAR、DT_LONGNVARCHAR、または DT_LONGBINARY に設定します。対応する LONGVARCHAR、LONGNVARCHAR、LONGBINARY の構造体は、次のとおりです。
typedef struct LONGVARCHAR { a_sql_uint32 array_len; a_sql_uint32 stored_len; a_sql_uint32 untrunc_len; char array[1]; } LONGVARCHAR, LONGNVARCHAR, LONGBINARY; |
静的 SQL 構造体と動的 SQL 構造体のいずれの場合も、構造体メンバは次のように定義します。
array_len (送信と取得)構造体の配列部分に割り付けられたバイト数
stored_len (送信と取得)配列に格納されるバイト数。常に array_len および untrunc_len 以下になります。
untrunc_len (取得のみ)値がトランケートされなかった場合に配列に格納されるバイト数。常に stored_len 以上になります。トランケートが発生すると、値は array_len より大きくなります。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |