SQLForeignKeys - 获取外键列的列表

用途

规范: DB2 CLI 2.1 ODBC 1.0

SQLForeignKeys() 返回关于指定表的外键的信息。此信息在 SQL 结果集中返回,可以使用用来检索查询生成的结果集的函数来处理此结果集。忽略 PKCatalogNameNameLength1PKSchemaNameNameLength2FKCatalogNameNameLength4FKSchemaNameNameLength5。返回的结果集的第 1、2、5、6、12 和 13 列总是长度为零的字符串。返回的结果集的第 10、11和 14 列总是零。

语法

SQLRETURN   SQLForeignKeys  (
                  SQLHSTMT          StatementHandle,  /* hstmt */
                  SQLCHAR      *FAR PKCatalogName,    /* szPkCatalogName */
                  SQLSMALLINT       NameLength1,      /* cbPkCatalogName */
                  SQLCHAR      *FAR PKSchemaName,     /* szPkSchemaName */
                  SQLSMALLINT       NameLength2,      /* cbPkSchemaName */
                  SQLCHAR      *FAR PKTableName,      /* szPkTableName */
                  SQLSMALLINT       NameLength3,      /* cbPkTableName */
                  SQLCHAR      *FAR FKCatalogName,    /* szFkCatalogName */
                  SQLSMALLINT       NameLength4       /* cbFkCatalogName */
                  SQLCHAR      *FAR FKSchemaName,     /* szFkSchemaName */
                  SQLSMALLINT       NameLength5,      /* cbFkSchemaName */
                  SQLCHAR      *FAR FKTableName,      /* szFkTableName */
                  SQLSMALLINT       NameLength6);     /* cbFkTableName */
 

函数自变量

表 58. SQLForeignKeys 自变量

数据类型 自变量 使用 描述
SQLHSTMT StatementHandle 输入 语句句柄。
SQLCHAR* PKCatalogName 输入 主键表的目录限定符。DB2 Everyplace 忽略此字段。
SQLSMALLINT NameLength1 输入 PKCatalogName 的长度。DB2 Everyplace 忽略此字段。
SQLCHAR* PKSchemaName 输入 主键表的模式限定符。DB2 Everyplace 忽略此字段。
SQLSMALLINT NameLength2 输入 PKSchemaName 的长度。DB2 Everyplace 忽略此字段。
SQLCHAR* PKTableName 输入 包含主键的表的名称。
SQLSMALLINT NameLength3 输入 PKTableName 的长度。
SQLCHAR* FKCatalogName 输入 包含外键的表的目录限定符。DB2 Everyplace 忽略此字段。
SQLSMALLINT NameLength4 输入 FKCatalogName 的长度。DB2 Everyplace 忽略此字段。
SQLCHAR* FKSchemaName 输入 包含外键的表的模式限定符。DB2 Everyplace 忽略此字段。
SQLSMALLINT NameLength5 输入 FKSchemaName 的长度。DB2 Everyplace 忽略此字段。
SQLCHAR* FKTableName 输入 包含外键的表的名称。
SQLSMALLINT NameLength6 输入 FKTableName 的长度。

用法

如果 PKTableName 包含表名,且 FKTableName 是空字符串,则 SQLForeignKeys() 返回一个结果集,此结果集包含指定表的主键以及所有引用该表的外键(在其它表中)。

如果 FKTableName 包含一个表名,而 PKTableName 是空字符串,则 SQLForeignKeys() 返回一个结果集,此结果集包含指定表中的所有外键以及它们所引用的主键 (在其它表中)。

如果 PKTableNameFKTableName 都包含表名,则 SQLForeignKeys() 返回在 FKTableName 中指定的表中的外键,这些外键引用在 PKTableName 中指定的表的主键。最多只应有一个键。

如果请求与主键相关联的外键,则结果集按 FKTABLE_NAME 和 ORDINAL_POSITION 排序。如果请求与外键相关联的主键,则结果集按 PKTABLE_NAME 和 ORDINAL_POSITION 排序。

用最大长度属性 128 声明目录函数结果集的 VARCHAR 列,以便与 SQL92 限制一致。

虽然可以添加新列,将来的发行版中也可以更改现有列的名称,但当前列的位置不会改变。

结果集包含以下列:

第 1 列 PKTABLE_CAT(VARCHAR(128))
这始终是长度为零的字符串。

第 2 列 PKTABLE_SCHEM(VARCHAR(128))
这始终是长度为零的字符串。

第 3 列 PKTABLE_NAME(VARCHAR(128) 且不为 NULL)
包含主键的表的名称。

第 4 列 PKCOLUMN_NAME(VARCHAR(128) 且不为 NULL)
主键列名。

第 5 列 FKTABLE_CAT(VARCHAR(128))
这始终是长度为零的字符串。

第 6 列 FKTABLE_SCHEM(VARCHAR(128))
这始终是长度为零的字符串。

第 7 列 FKTABLE_NAME(VARCHAR(128) 且不为 NULL)
包含外键的表的名称。

第 8 列 FKCOLUMN_NAME(VARCHAR(128) 且不为 NULL)
外键列名。

第 9 列 ORDINAL_POSITION(SMALLINT 且不为 NULL)
键中列的原始位置,从 1 开始。

第 10 列 UPDATE_RULE(SMALLINT)
这始终是零。

第 11 列 DELETE_RULE(SMALLINT)
这始终是零。

第 12 列 FK_NAME(VARCHAR(128))
这始终是长度为零的字符串。

第 13 列 PK_NAME(VARCHAR(128))
这始终是长度为零的字符串。

第 14 列 DEFERRABILITY(SMALLINT)
这始终是零。

DB2 CLI 使用的列名遵循 X/Open CLI CAE 规范样式。列类型、内容和顺序与对 ODBC 中的 SQLForeignKeys() 结果集定义的列类型、内容和顺序完全相同。

返回码

诊断

表 59. SQLForeign SQLSTATE

SQLSTATE 描述 解释
24000 游标状态无效。 已在该语句句柄上打开了游标。
40003 08S01 通信链路故障。 函数尚未完成,应用程序与数据源间的通信链路就失效了。
HY001 内存分配失败。 DB2 CLI 无法分配支持函数的执行或完成所需的内存。
HY009 自变量值无效。 PKTableNameFKTableName 自变量都是 NULL 指针。
HY010 函数顺序错误。 执行“处理数据”的操作(SQLPrepare()SQLExecDirect())时调用了该函数。
HY014 不再有句柄。 因为内部资源问题,DB2 CLI 无法分配句柄。
HY090 字符串或缓冲区长度无效。 其中一个名称长度自变量的值小于 0,但不等于 SQL_NTS

限制

无。

相关参考