SQLDA 中的每个 sqlvar 结构都说明一个主机变量。sqlvar 结构的各字段的含义如下:
sqltype 此描述符描述的变量的类型。
低序位指示是否允许使用 NULL 值。有效的类型和常量定义可以在 sqldef.h 头文件中找到。
此字段由 DESCRIBE 语句填充。在向数据库服务器提供数据或从中检索数据时,您可以将此字段设置为任何类型。任何必要的类型转换都会自动完成。
sqllen 变量的长度。sqllen 值含有 a_sql_len 类型。该长度的实际含义取决于类型信息和 SQLDA 的使用方式。
对于 LONG VARCHAR、LONG NVARCHAR 和 LONG BINARY 数据类型,使用 DT_LONGVARCHAR、DT_LONGNVARCHAR 或 DT_LONGBINARY 数据类型结构的 array_len 字段,而不是使用 sqllen 字段。
sqldata 指向此变量所占用的内存的指针。此内存必须对应于 sqltype 和 sqllen 字段。
对于 UPDATE 和 INSERT 语句,如果 sqldata 指针为空指针,操作中就不会涉及此变量。对于 FETCH,如果 sqldata 指针是空指针,则不返回数据。换句话说,sqldata 指针返回的列是未绑定列。
如果 DESCRIBE 语句使用 LONG NAMES,则此字段保存结果集列的长名称。另外,如果 DESCRIBE 语句是 DESCRIBE USER TYPES 语句,则此字段保存用户定义的数据类型的长名称,而不是列的长名称。如果该类型是基类型,则此字段为空。
sqlind 指向指示符值的指针。指示符值含有 a_sql_len 类型。负的指示符值表示是 NULL 值。正的指示符值表示此变量已经被 FETCH 语句截断,且指示符值包含截断前的数据长度。如果将 conversion_error 数据库选项设置为 Off,则值 -2 表示出现了转换错误。
如果 sqlind 指针是空指针,则说明没有适用于此主机变量的指示符变量。
DESCRIBE 语句也使用 sqlind 字段来指示参数类型。如果类型是用户定义的数据类型,则此字段将设置为 DT_HAS_USERTYPE_INFO。在此情况下,您可能希望执行 DESCRIBE USER TYPES 以获取有关用户定义的数据类型的信息。
sqlname 类似 VARCHAR 的结构,如下所示:
struct sqlname { short int length; char data[ SQL_MAX_NAME_LEN ]; }; |
它由 DESCRIBE 语句填充,在其它情况下不使用它。对于以下两种格式的 DESCRIBE 语句,此字段具有不同的含义:
SELECT LIST 名称数据缓冲区由 SELECT 列表中对应项的列标题填充。
BIND VARIABLES 名称数据缓冲区由曾用作绑定变量的主机变量的名称填充,或者,如果使用了未命名的参数标记,则用 "?" 填充。
在 DESCRIBE SELECT LIST 语句中,出现的任何指示符变量都会用一个指示 SELECT 列表项是否可更新的标志来填充。有关此标志的详细信息可以在 sqldef.h 头文件中找到。
如果 DESCRIBE 语句是 DESCRIBE USER TYPES 语句,则此字段保存用户定义数据类型的长名称,而不是列的长名称。如果该类型是基类型,则此字段为空。
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |