规范: | DB2 CLI 2.1 | ODBC 1.0 |
|
SQLForeignKeys() 返回关于指定表的外键的信息。此信息在 SQL 结果集中返回,可以使用用来检索查询生成的结果集的函数来处理此结果集。忽略 PKCatalogName、NameLength1、PKSchemaName、NameLength2、FKCatalogName、NameLength4、FKSchemaName 和 NameLength5。返回的结果集的第 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 */
函数自变量
数据类型 | 自变量 | 使用 | 描述 |
---|---|---|---|
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() 返回一个结果集,此结果集包含指定表中的所有外键以及它们所引用的主键 (在其它表中)。
如果 PKTableName 和 FKTableName 都包含表名,则 SQLForeignKeys() 返回在 FKTableName 中指定的表中的外键,这些外键引用在 PKTableName 中指定的表的主键。最多只应有一个键。
如果请求与主键相关联的外键,则结果集按 FKTABLE_NAME 和 ORDINAL_POSITION 排序。如果请求与外键相关联的主键,则结果集按 PKTABLE_NAME 和 ORDINAL_POSITION 排序。
用最大长度属性 128 声明目录函数结果集的 VARCHAR 列,以便与 SQL92 限制一致。
虽然可以添加新列,将来的发行版中也可以更改现有列的名称,但当前列的位置不会改变。
结果集包含以下列:
DB2 CLI 使用的列名遵循 X/Open CLI CAE 规范样式。列类型、内容和顺序与对 ODBC 中的 SQLForeignKeys() 结果集定义的列类型、内容和顺序完全相同。
返回码
诊断
SQLSTATE | 描述 | 解释 |
---|---|---|
24000 | 游标状态无效。 | 已在该语句句柄上打开了游标。 |
40003 08S01 | 通信链路故障。 | 函数尚未完成,应用程序与数据源间的通信链路就失效了。 |
HY001 | 内存分配失败。 | DB2 CLI 无法分配支持函数的执行或完成所需的内存。 |
HY009 | 自变量值无效。 | PKTableName 和 FKTableName 自变量都是 NULL 指针。 |
HY010 | 函数顺序错误。 | 执行“处理数据”的操作(SQLPrepare() 或 SQLExecDirect())时调用了该函数。 |
HY014 | 不再有句柄。 | 因为内部资源问题,DB2 CLI 无法分配句柄。 |
HY090 | 字符串或缓冲区长度无效。 | 其中一个名称长度自变量的值小于 0,但不等于 SQL_NTS |
限制
无。
相关参考