Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.0 (中文) » SQL Anywhere 服务器 - 编程 » 嵌入式 SQL » SQL 描述符区域 (SQLDA)

 

SQLDA 主机变量说明

SQLDA 中的每个 sqlvar 结构都说明一个主机变量。sqlvar 结构的各字段的含义如下:

  • sqltype   此描述符描述的变量的类型。请参见嵌入式 SQL 数据类型

    低序位指示是否允许使用 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 字段。

    有关长度字段的详细信息,请参见SQLDA sqllen 字段值

  • sqldata   指向此变量所占用的内存的指针。此内存必须对应于 sqltype 和 sqllen 字段。

    有关存储格式,请参见嵌入式 SQL 数据类型

    对于 UPDATE 和 INSERT 语句,如果 sqldata 指针为空指针,操作中就不会涉及此变量。对于 FETCH,如果 sqldata 指针是空指针,则不返回数据。换句话说,sqldata 指针返回的列是未绑定列

    如果 DESCRIBE 语句使用 LONG NAMES,则此字段保存结果集列的长名称。另外,如果 DESCRIBE 语句是 DESCRIBE USER TYPES 语句,则此字段保存用户定义的数据类型的长名称,而不是列的长名称。如果该类型是基类型,则此字段为空。

  • sqlind   指向指示符值的指针。指示符值含有 a_sql_len 类型。负的指示符值表示是 NULL 值。正的指示符值表示此变量已经被 FETCH 语句截断,且指示符值包含截断前的数据长度。如果将 conversion_error 数据库选项设置为 Off,则值 -2 表示出现了转换错误。请参见conversion_error 选项

    有关详细信息,请参见指示符变量

    如果 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   名称数据缓冲区由选择列表中对应项的列标题填充。

    • BIND VARIABLES   名称数据缓冲区由曾用作绑定变量的主机变量的名称填充,或者,如果使用了未命名的参数标记,则用 "?" 填充。

    在 DESCRIBE SELECT LIST 语句中,出现的任何指示符变量都会用一个指示选择列表项是否可更新的标志来填充。有关此标志的详细信息可以在 sqldef.h 头文件中找到。

    如果 DESCRIBE 语句是 DESCRIBE USER TYPES 语句,则此字段保存用户定义数据类型的长名称,而不是列的长名称。如果该类型是基类型,则此字段为空。