描述查询的结果集,且有一行描述查询的每个输出列。
sa_describe_query( query [, add_keys ] )
query 使用此 LONG VARCHAR 参数指定所描述的 SQL 语句的文本。
add_keys 使用此可选的 BIT 参数指定是否确定一组列,用来唯一标识所描述查询的结果集中的行。缺省值为 0;数据库服务器不尝试确定列。有关此参数的完整说明,请参见下面的注释部分。
列名 | 数据类型 | 说明 |
---|---|---|
column_number | INTEGER | 此行描述的列的顺序位置,从 1 开始。 |
name | VARCHAR(128) | 列的名称。 |
domain_id | SMALLINT | 列的数据类型。 |
domain_name | VARCHAR(128) | 数据类型名称。 |
domain_name_with_size | VARCHAR(160) | 数据类型名称,包括大小和精度(如 CREATE TABLE 或 CAST 函数中所用)。 |
width | INTEGER | 字符串参数的长度、数字参数的精度或任何其它数据类型的存储字节数。 |
scale | INTEGER | 数字数据类型列的小数点后的位数,对于所有其它数据类型该值为零。 |
declared_width | INTEGER | 字符串参数的长度、数字参数的精度或任何其它数据类型的存储字节数。 |
user_type_id | SMALLINT | 如果存在用户定义数据类型,则为其 type_id,否则为 NULL。 |
user_type_name | VARCHAR(128) | 如果存在用户定义数据类型,则为其名称,否则为 NULL。 |
correlation_name | VARCHAR(128) | 如果提供了与表达式关联的相关名,则为该相关名,否则为 NULL。 |
base_table_id | UNSIGNED INTEGER | 如果表达式是列,则为 table_id,否则为 NULL。 |
base_column_id | UNSIGNED INTEGER | 如果表达式是列,则为 column_id,否则为 NULL。 |
base_owner_name | VARCHAR(128) | 如果表达式是列,则为所有者名称,否则为 NULL。 |
base_table_name | VARCHAR(128) | 如果表达式是列,则为表名,否则为 NULL。 |
base_column_name | VARCHAR(128) | 如果表达式是列,则为列名,否则为 NULL。 |
nulls_allowed | BIT | 一个指示符,如果表达式可以是 NULL,则为 1,否则为 0。 |
is_autoincrement | BIT | 一个指示符,如果表达式是声明为 AUTOINCREMENT 的列,则为 1,否则为 0。 |
is_key_column | BIT | 一个指示符,如果表达式是结果集的键的一部分,则为 1,否则为 0。有关详细信息,请参见下面的注释部分。 |
is_added_key_column | BIT | 一个指示符,如果表达式是添加的键列,则为 1,否则为 0。有关详细信息,请参见下面的注释部分。 |
sa_describe_query 过程提供独立于 API 的机制,以描述查询结果集中表达式的名称和类型信息。
当为 add_keys 指定 1 时,sa_describe_query 过程尝试从被查询的对象中查找一组列,组合这组列后,可将其用作键以唯一标识所描述查询的结果集中的行。该键采用所查询对象中一个或多个列的形式,且可能包括未在查询中显式引用的列。如果优化程序找到一个键,则将通过使 is_key_column 值为 1 的方式在结果中标识键所使用的一个或多个列。如果未找到键,则返回错误。
对于包括在键中但未在查询中显式引用的任意列,将 is_added_key_column 值设置为 1 表示该列已添加到过程的结果中;否则,is_added_key_column 的值为 0。
如果未指定 add_keys,或者指定其值为 0,则优化程序不会尝试查找结果集的键,且 is_key_column 和 is_added_key_column 列均包含 NULL。
declared_width 和 width 值均描述列的大小。declared_width 描述当由 CREATE TABLE 语句或由查询定义列时的列大小,而 width 值给出读取到客户端时列的大小。客户端的类型表示形式可能与数据库服务器不同。例如,如果将 return_date_time_as_string 选项打开,日期和时间类型则会转换为字符串。对于字符串,声明具有字符长度语义的列具有与 CREATE TABLE 大小相匹配的 declared_width 值,而 width 值给出存储返回字符串所需的最大字节数。例如:
声明 | width | declared_width |
---|---|---|
CHAR(10) | 10 | 10 |
CHAR(10 CHAR) | 40 | 10 |
TIMESTAMP | 取决于时间戳格式字符串的长度 | 8 |
NUMERIC(10, 3) | 10(精度) | 10(精度) |
无
无
以下示例介绍查询 Departments 表中的所有列时所返回的信息:
SELECT * FROM sa_describe_query( 'SELECT * FROM Departments DEPT' ); |
结果显示 is_key_column 和 is_added_key_column 的值为 NULL,因为未指定 add_keys 参数。
以下示例介绍查询 Employees 表(与 Departments 表连接在一起)的 DepartmentName 和 Surname 列时所返回的信息:
SELECT * FROM sa_describe_query( 'SELECT DepartmentName, Surname FROM Employees E JOIN Departments D ON E.EmployeeID = D.DepartmentHeadId', add_keys = 1 ); |
在结果集的第 3 行和第 4 行所显示的结果为 1,表明需要用来唯一标识查询结果集中行的列是 Employees.EmployeeID 和 Departments.DepartmentID。此外,因为 Employees.EmployeeID 和 Departments.DepartmentID 未在所描述的查询中显式引用,所以在第 3 行和第 4 行的 is_added_key_column 中显示为 1。
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |