以下 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 函数。要读取 IN 和 INOUT 参数,请使用 get_value 函数。
调用 get_value 之后,an_extfn_value 结构的类型字段可用于获取参数的数据类型信息。以下示例代码段显示了如何标识参数的类型。
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; } |
有关数据类型的详细信息,请参见嵌入式 SQL 中的主机变量。
NCHAR、NVARCHAR、LONG NVARCHAR 和 NTEXT 等 UTF-8 数据类型都作为 UTF-8 编码字符串传递。Windows MultiByteToWideChar 等函数可用来将 UTF-8 字符串转换为宽字符 (Unicode) 字符串。
对于所有参数,您都可以将 NULL 作为有效值传递。外部库中的函数可以提供 NULL 作为任何数据类型的返回值。
要设置外部函数中的返回值,请以值为 0 的 arg_num 参数调用 set_value 函数。如果不使用设置为 0 的 arg_num 调用 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讨论此页。
|
版权 © 2013, SAP 股份公司或其关联公司. - SAP Sybase SQL Anywhere 16.0 |