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 参考 » 系统对象 » 系统过程 » 按字母顺排序的系统过程列表

 

sa_describe_query 系统过程

描述查询的结果集,且有一行描述查询的每个输出列。

语法
sa_describe_query( 
query 
[, add_keys ] 
)
参数
  • query   使用此 LONG VARCHAR 参数指定所描述的 SQL 语句的文本。

  • add_keys   使用此可选的 BIT 参数指定是否确定一组列,用来唯一标识所描述查询的结果集中的行。缺省值为 0;数据库服务器不尝试确定列。有关此参数的完整说明,请参见下面的注释部分。

结果集
列名 数据类型 说明
column_number INTEGER 此行描述的列的顺序位置,从 1 开始。
name VARCHAR(128) 列的名称。
domain_id SMALLINT 列的数据类型。请参见SYSDOMAIN 系统视图
domain_name VARCHAR(128) 数据类型名称。请参见SYSDOMAIN 系统视图
domain_name_with_size VARCHAR(160) 数据类型名称,包括大小和精度(如 CREATE TABLE 或 CAST 函数中所用)。
width INTEGER 字符串参数的长度、数字参数的精度或任何其它数据类型的存储字节数。
scale INTEGER 数字数据类型列的小数点后的位数,对于所有其它数据类型该值为零。
declared_width INTEGER 字符串参数的长度、数字参数的精度或任何其它数据类型的存储字节数。
user_type_id SMALLINT 如果存在用户定义数据类型,则为其 type_id,否则为 NULL。请参见SYSUSERTYPE 系统视图
user_type_name VARCHAR(128) 如果存在用户定义数据类型,则为其名称,否则为 NULL。请参见SYSUSERTYPE 系统视图
correlation_name VARCHAR(128) 如果提供了与表达式关联的相关名,则为该相关名,否则为 NULL。
base_table_id UNSIGNED INTEGER 如果表达式是字段,则为 table_id,否则为 NULL。请参见SYSTAB 系统视图
base_column_id UNSIGNED INTEGER 如果表达式是字段,则为 column_id,否则为 NULL。请参见SYSTABCOL 系统视图
base_owner_name VARCHAR(128) 如果表达式是字段,则为所有者名称,否则为 NULL。请参见SYSUSER 系统视图
base_table_name VARCHAR(128) 如果表达式是字段,则为表名,否则为 NULL。
base_column_name VARCHAR(128) 如果表达式是字段,则为列名,否则为 NULL。
nulls_allowed BIT 一个指示符,如果表达式可以是 NULL,则为 1,否则为 0。
is_autoincrement BIT 一个指示符,如果表达式是声明为自动增量的列,则为 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。