外部ライブラリに渡されるのは、次に示す SQL データ型です。
SQL データ型 | sqldef.h | C データ型 |
---|---|---|
CHAR | DT_FIXCHAR | 指定された長さの文字データ |
VARCHAR | DT_VARCHAR | 指定された長さの文字データ |
LONG VARCHAR、TEXT | DT_LONGVARCHAR | 指定された長さの文字データ |
UNIQUEIDENTIFIERSTR | DT_FIXCHAR | 指定された長さの文字データ |
XML | DT_LONGVARCHAR | 指定された長さの文字データ |
NCHAR | DT_NFIXCHAR | 指定された長さの UTF-8 文字データ |
NVARCHAR | DT_NVARCHAR | 指定された長さの UTF-8 文字データ |
LONG NVARCHAR、NTEXT | DT_LONGNVARCHAR | 指定された長さの UTF-8 文字データ |
UNIQUEIDENTIFIER | DT_BINARY | 16 バイト長のバイナリデータ |
BINARY | DT_BINARY | 指定された長さのバイナリデータ |
VARBINARY | DT_BINARY | 指定された長さのバイナリデータ |
LONG BINARY | DT_LONGBINARY | 指定された長さのバイナリデータ |
TINYINT | DT_TINYINT | 1 バイト整数 |
[ UNSIGNED ] SMALLINT | DT_SMALLINT、DT_UNSSMALLINT | [符号なし] 2 バイト整数 |
[ UNSIGNED ] INT | DT_INT、DT_UNSINT | [符号なし] 4 バイト整数 |
[ UNSIGNED ] BIGINT | DT_BIGINT、DT_UNSBIGINT | [符号なし] 8 バイト整数 |
REAL、FLOAT(1-24) | DT_FLOAT | 単精度浮動小数点数 |
DOUBLE、FLOAT(25-53) | DT_DOUBLE | 倍精度浮動小数点数 |
日付データ型または時刻データ型は使用できません。また、DECIMAL または NUMERIC データ型 (通貨データ型を含む) も使用できません。
INOUT または OUT パラメーターに値を指定するには、set_value 関数を使用します。IN と INOUT パラメーターを読み取るには、get_value 関数を使用します。
get_value を呼び出した後で、an_extfn_value 構造体の type フィールドを使用して、パラメーターのデータ型情報を取得できます。次のサンプルコードは、パラメーターのデータ型を識別する方法を示します。
an_extfn_value arg; a_sql_data_type data_type; extapi->get_value( arg_handle, 1, &arg ); data_type = arg.type & DT_TYPES; switch( data_type ) { case DT_FIXCHAR: case DT_VARCHAR: case DT_LONGVARCHAR: break; default: return; } |
データ型の詳細については、Embedded SQL のホスト変数を参照してください。
NCHAR、NVARCHAR、LONG NVARCHAR、NTEXT などの UTF-8 データ型は、UTF-8 でエンコードされた文字列として渡されます。Windows MultiByteToWideChar 関数などの関数を使用して、UTF-8 文字列をワイド文字列 (Unicode) に変換できます。
すべての引数に有効な値として NULL を渡すことができます。外部ライブラリの関数は、すべてのデータ型の戻り値として NULL を渡すことができます。
外部関数に戻り値を設定するには、arg_num パラメーター値に 0 を指定して set_value 関数を呼び出します。arg_num を 0 に設定せずに set_value を呼び出すと、関数の結果は NULL になります。
ストアド関数呼び出しの戻り値のデータ型を設定する必要もあります。次のコードフラグメントは、戻り値のデータ型を設定する方法を示します。
an_extfn_value retval; retval.type = DT_LONGVARCHAR; retval.data = result; retval.piece_len = retval.len.total_len = (a_sql_uint32) strlen( result ); extapi->set_value( arg_handle, 0, &retval, 0 ); |
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |