规范: | DB2 CLI 2.1 | ODBC 1.0 |
|
SQLColumns() 返回指定表中的列的列表。 此信息在 SQL 结果集中返回,可以使用用来取装查询生成的结果集的函数来检索此结果集。
语法
SQLRETURN SQLColumns ( SQLHSTMT StatementHandle, /* hstmt */ SQLCHAR FAR *CatalogName, /* szCatalogName */ SQLSMALLINT NameLength1, /* cbCatalogName */ SQLCHAR FAR *SchemaName, /* szSchemaName */ SQLSMALLINT NameLength2, /* cbSchemaName */ SQLCHAR FAR *TableName, /* szTableName */ SQLSMALLINT NameLength3, /* cbTableName */ SQLCHAR FAR *ColumnName, /* szColumnName */ SQLSMALLINT NameLength4); /* cbColumnName */
函数自变量
数据类型 | 自变量 | 使用 | 描述 |
---|---|---|---|
SQLHSTMT | StatementHandle | 输入 | 语句句柄。 |
SQLCHAR | CatalogName | 输入 | 可能包含用来限定结果集的 pattern-value
的缓冲区。Catalog 是由 3 部分组成的表名的第 1 部分。
此自变量将被 DB2 Everyplace 忽略。 |
SQLSMALLINT | NameLength1 | 输入 | CatalogName 的长度。
此自变量将被 DB2 Everyplace 忽略。 |
SQLCHAR | SchemaName | 输入 | 可能包含用来按模式名限定结果集的 pattern-value
的缓冲区。
此自变量将被 DB2 Everyplace 忽略。 |
SQLSMALLINT | NameLength2 | 输入 | SchemaName 的长度。
此自变量将被 DB2 Everyplace 忽略。 |
SQLCHAR | TableName | 输入 | 可能包含用来按表名限定结果集的 pattern-value 的缓冲区。 |
SQLSMALLINT | NameLength3 | 输入 | TableName 的长度。 |
SQLCHAR | ColumnName | 输入 | 可能包含用来按列名限定结果集的 pattern-value 的缓冲区。 |
SQLSMALLINT | NameLength4 | 输入 | ColumnName 的长度。 |
用法
将调用此函数以检索有关一个表或一组表的列的信息。典型应用程序可能希望在调用 SQLTables() 后调用此函数以确定表的各列。应用程序应使用 SQLTables() 结果集的 TABLE_NAME 中返回的字符串作为此函数的输入。
SQLColumns() 返回标准结果集,按 TABLE_NAME 和 ORDINAL_POSITION 排序。*** 列示结果集中的各列。
TableName 和 ColumnName 自变量将接受搜索模式。
此函数不返回有关结果集中的各列的信息。应使用 SQLDescribeCol() 或 SQLColAttribute() 代替。
最好不要经常调用 SQLColumns(),原因是在许多情况下它们都映射至对系统目录的复杂且高成本的查询。应保存结果而不是重复调用。
已使用最大长度属性 128 声明目录函数结果集的 VARCHAR 列,以便与 SQL92 限制一致。因为 DB2 名称少于 128 个字符,所以应用程序可选择总是为输出缓冲区保留 128 个字符(加上 null 终止符),或者使用 SQL_MAX_TABLE_NAME_LEN 调用 SQLGetInfo() 以分别确定连接的 DBMS 支持的 TABLE_NAME 和 COLUMN_NAME 列的实际长度。
虽然可以添加新列,将来的发行版中也可以更改现有列的名称,但当前列的位置不会改变。
SQLColumns 返回的列
如果 DATA_TYPE 列值表示字符或二进制字符串,则此列包含该列的最大长度(以字符计)。
对于 DATE、TIME 或 TIMESTAMP 数据类型,这是在转换为字符时显示该值所需的总字符数。
对于数字数据类型,这是该列中允许的总位数。
另请参阅数据类型属性。
10 或 NULL。
如果 DATA_TYPE 是确切的数字数据类型,则此列包含值 10, 而 COLUMN_SIZE 包含该列允许的小数位数。
对于数字数据类型,DBMS 返回 NUM_PREC_RADIX 为 10。
对于基不适用的数据类型,将返回 NULL。
如果该列不接受 NULL 值,则为 SQL_NO_NULLS。
如果该列接受 NULL 值,则为 SQL_NULLABLE。
列的缺省值。如果缺省值为数字文字,则此列将包含数字文字的字符表示,没有用单引号括起来。 如果缺省值为字符串,则此列即用单引号括起来的该字符串。 如果缺省值为伪文字(例如,DATE、TIME 和 TIMESTAMP 列),则此列将包含伪文字的关键字(例如,CURRENT DATE), 没有用单引号括起来。
如果将 NULL 指定为缺省值,则此列将返回字 NULL,未括在括号中。 如果未指定缺省值,则此列为 NULL。
如果该列已知是不可空的,则包含字符串“NO”;否则包含字符串“YES”。
此结果集与 X/Open CLI Columns() 结果集规范完全相同,后者是在 ODBC V2 中指定的 SQLColumns() 结果集的扩展版本。ODBC SQLColumns() 结果集在相同位置包括每一列。
注意:此结果集与 X/Open CLI Columns() 结果集规范完全相同,后者是在 ODBC V2 中指定的 SQLColumns() 结果集的扩展版本。ODBC SQLColumns() 结果集在相同位置包括每一列。
返回码
诊断
SQLSTATE | 描述 | 解释 |
---|---|---|
24000 | 游标状态无效。 | 已在语句句柄上打开游标。 |
40003 08S01 | 通信链路故障。 | 函数尚未完成,应用程序与数据源间的通信链路就失效了。 |
HY001 | 内存分配失败。 | DB2 CLI 无法分配支持函数的执行或完成所需的内存。 |
HY014 | 不再有句柄。 | 因为内部资源问题,DB2 CLI 无法分配句柄。 |
HY090 | 字符串或缓冲区长度无效。 | 其中一个名称长度自变量的值小于 0,但不等于 SQL_NTS。 |
限制
无。
相关参考