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

 

データ型の処理

データ型

外部ライブラリに渡されるのは、次に示す 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_UNSMALLINT [符号なし] 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 API 関数を使用します。IN と INOUT パラメータを読み取るには、get_value API 関数を使用します。

パラメータのデータ型の判別

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;
}

データ型の詳細については、ホスト変数の使用を参照してください。

UTF-8 データ型

NCHAR、NVARCHAR、LONG NVARCHAR、NTEXT などの UTF-8 データ型は、UTF-8 でエンコードされた文字列として渡されます。Windows MultiByteToWideChar 関数などの関数を使用して、UTF-8 文字列をワイド文字列 (Unicode) に変換できます。

NULL を渡す

すべての引数に有効な値として 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 );