oracle - Oracle中如何查找具有外键的表?

标签 oracle key

我计划从一个表中删除数据,我想知道有多少个表以及哪些表有外键引用 Oracle 中的这个特定表。因为我必须将外键设置为空。我想知道与该特定表有 FK 的所有表的列表。

最佳答案

SELECT
  FK.OWNER||'.'||FK.TABLE_NAME AS CHILD_TABLE,
  SRC.OWNER||'.'||SRC.TABLE_NAME AS PARENT_TABLE,
  FK.CONSTRAINT_NAME AS FK_CONSTRAINT,
  SRC.CONSTRAINT_NAME AS REFERENCED_CONSTRAINT
FROM ALL_CONSTRAINTS FK
JOIN ALL_CONSTRAINTS SRC ON FK.R_CONSTRAINT_NAME = SRC.CONSTRAINT_NAME
WHERE
  FK.CONSTRAINT_TYPE = 'R'
  AND SRC.OWNER = 'MY_SCHEMA'
  AND SRC.TABLE_NAME = 'MY_TABLE';

我遇到的情况是,我感兴趣的表不属于我连接的模式。所以我需要修改currently accepted answer中的查询使用ALL_CONSTRAINTS而不是USER_CONSTRAINTS 。在这个过程中,我犯了一个错误,我发现接受的答案很难阅读,所以我可以修复它。 (缺乏解释并没有帮助。)结果,我最终提出了自己的查询。基本上是一样的,但是我觉得这样更容易理解一些。

FK.CONSTRAINT_TYPE = 'R'向下过滤FK到一组外键约束,并且连接将这些外键与其“引用的约束”配对。 (引用的约束通常是“父”表的主键。)最后,我们使用 SRC.OWNER = 'MY_SCHEMA' AND SRC.TABLE_NAME = 'MY_TABLE' 过滤到我们感兴趣的父表。 .

当然,您可以将其切换为使用 USER_CONSTRAINTS如果你希望;只需删除 SRC.OWNER检查和 OWNER SELECT 中的前缀.

关于oracle - Oracle中如何查找具有外键的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3751932/

相关文章:

用于转置某些列的 SQL 查询

oracle - 像Oracle中一样,Hadoop/Hive中是否有Range Type分区?

xml - 从 Oracle 表在 PL/SQL 中生成 XML 文档

grails - 在 Grails 选择列表上设置选项键和值?

arrays - Bash 间接引用关联数组

c++ - 生命游戏哈希表 .h 文件模板问题

java - 使用 XPath 查询 oracle 数据库时,如何返回值列表而不是字符串?

java - 配置 Hibernate 以使用 Oracle 的 SYS_GUID() 作为主键

NHibernate 一对一映射,非主键

python - 如何从 Ordered Dictionary 中获取所有键?