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 外部関数 API » 外部関数のプロトタイプ

 

an_extfn_value 構造体

呼び出し元の 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_INTDT_FIXCHARDT_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 文字列であると予期されています。

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 );
}
参照