Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.
呼び出し元の SQL 環境からパラメータデータにアクセスするために使用します。
typedef struct an_extfn_value { void * data; a_sql_uint32 piece_len; union { a_sql_uint32 total_len; a_sql_uint32 remain_len; } len; a_sql_data_type type; } an_extfn_value;
data このパラメータのデータへのポインタ。
piece_len パラメータのセグメントの長さ。これは、total_len 以下となります。
total_len パラメータの合計長。文字列の場合は文字列の長さを表します (NULL ターミネータは含まれません)。このプロパティは、get_value コールバック関数を呼び出した後に設定されます。get_piece コールバック関数を呼び出した後は無効になります。
remain_len パラメータがセグメント単位で取得された場合の、取得されていない残りの部分の長さとなります。このプロパティは、get_piece コールバック関数の各呼び出しの後に設定されます。
type パラメータのタイプを示します。これは、DT_INT、DT_FIXCHAR、DT_BINARY などの Embedded SQL データ型の 1 つです。Embedded SQL のデータ型を参照してください。
外部関数インタフェースが次の SQL 文を使って記述されていると仮定します。
CREATE FUNCTION mystring( IN instr LONG VARCHAR ) RETURNS LONG VARCHAR EXTERNAL NAME 'mystring@c:\\project\\mystring.dll';
次のコードフラグメントは、an_extfn_value タイプのオブジェクトのプロパティにアクセスする方法を示したものです。この例では、この関数 (mystring) の入力パラメータ 1 (instr) は SQL LONGVARCHAR 文字列であると予期されています。
mystring
instr
an_extfn_value arg; result = extapi->get_value( arg_handle, 1, &arg ); if( result == 0 || arg.data == NULL ) { return; // no parameter or parameter is NULL } if( arg.type != DT_LONGVARCHAR ) { return; // unexpected type of parameter } cmd = (char *)malloc( arg.len.total_len + 1 ); offset = 0; for( ; result != 0; ) { if( arg.data == NULL ) break; memcpy( &cmd[offset], arg.data, arg.piece_len ); offset += arg.piece_len; cmd[offset] = '\0'; if( arg.piece_len == 0 ) break; result = extapi->get_piece( arg_handle, 1, &arg, offset ); }