在StackOverflow中,我可以找到有关如何在SQL Server中查找所有外键约束的文章。

我只能在Oralce中找到有关如何查找表的所有外键约束的文章(外键列表和它们引用的表)。

我的问题是:如何列出所有表的所有外键约束,而不是Oracle中的表。 我想要的答案将是这样的,但对于Oracle。

附言 我正在使用oralce 11g速成版。 我的Oracle GUI管理工具是Orace SQL开发人员。

我会这样做;

如果您希望将其与同一行的所有列进行汇总

select distinct c1.owner, c1.table_name, c1.constraint_name, c2.owner, c2.table_name,

listagg(c2.column_name,',') WITHIN GROUP ( ORDER BY C2.POSITION) OVER ( PARTITION BY c1.owner, c1.table_name, c1.constraint_name, c2.owner, c2.table_name ) column_list

from dba_constraints c1

JOIN dba_cons_columns c2

ON c1.R_CONSTRAINT_NAME=C2.CONSTRAINT_NAME and c1.r_owner=c2.owner

where C1.constraint_type = 'R'

或类似,如果您希望每列一行

select  c1.owner, c1.table_name, c1.constraint_name, c2.owner, c2.table_name, c2.column_name

from dba_constraints c1

JOIN dba_cons_columns c2

ON c1.R_CONSTRAINT_NAME=C2.CONSTRAINT_NAME and c1.r_owner=c2.owner

where C1.constraint_type = 'R'

order by c1.owner, c1.table_name, c1.constraint_name, c2.position

或者如果您想引用列详细信息和引用列详细信息

with constraint_colum_list as ( select owner, table_name, constraint_name, listagg(column_name,',') WITHIN GROUP ( order by position ) as column_list

FROM DBA_CONS_COLUMNS GROUP BY owner, table_name, constraint_name )

select distinct c1.owner, c1.table_name, c1.constraint_name, c2.column_list, c3.owner, c3.table_name, c3.constraint_name, c3.column_list

from DBA_constraints c1

JOIN constraint_colum_list c2 ON c1.CONSTRAINT_NAME=C2.CONSTRAINT_NAME and c1.owner=c2.owner

JOIN constraint_colum_list c3 ON C1.R_CONSTRAINT_NAME=C3.CONSTRAINT_NAME AND C1.R_OWNER=C3.owner

where C1.constraint_type = 'R'

-- AND c1.owner = 'YOUR_SCHEMA';

对于您的最后一个解决方案,AND c1.owner = YOUR_SCHEMA;如果我的oracle sql开发人员登录名是TestDemo,那么我需要做AND c1.owner = TestDemo;然后,我只能输出我指定/创建的外键约束。但是SQL Server不需要这样做,只有Oracle需要吗?

我的答案是基于您要求在所有表上使用所有外键的事实。如果您只对自己感兴趣,则将DBA_CONSTRAINTS替换为USER_CONSTRAINTS,将DBA_CONS_COLUMNS替换为USER_CONS_COLUMNS,您将只看到自己的一个

大。有用。我是否可以知道使用DBA_CONSTRAINTS通常还能得到什么其他结果?我只知道由用户/我们指定的那些外键约束是有用的,因为我可以看到表和列之间的关系,因此我可以知道项目业务领域。

目录视图的所有工作都相同。您有一个DBA_版本,其中包含所有数据库的数据,ALL_版本包含呼叫用户有权访问的对象,而USER_版本仅包含该用户拥有的对象。但是其中有很多DBS_OBJECTS DBA_TABLE DBA_TAB_PRIV等。所有这些都在oracle文档中,位于:docs.oracle.com/cd/E11882_01/nav/catalog_views.htm

该答案基于LauDec的解决方案。

由于我只需要我/用户指定的所有外键约束,因此我将使用以下SQL:

with constraint_colum_list as ( select owner, table_name, constraint_name, listagg(column_name,',') WITHIN GROUP ( order by position ) as column_list

FROM USER_CONS_COLUMNS GROUP BY owner, table_name, constraint_name )

select distinct c1.owner, c1.table_name, c1.constraint_name, c2.column_list, c3.owner, c3.table_name, c3.constraint_name, c3.column_list

from USER_CONSTRAINTS c1

JOIN constraint_colum_list c2 ON c1.CONSTRAINT_NAME=C2.CONSTRAINT_NAME and c1.owner=c2.owner

JOIN constraint_colum_list c3 ON C1.R_CONSTRAINT_NAME=C3.CONSTRAINT_NAME AND C1.R_OWNER=C3.owner

where C1.constraint_type = 'R';

不要在where条件中使用Table name,您将获得所有表的FK约束。

SELECT A.TABLE_NAME,

A.COLUMN_NAME,

A.CONSTRAINT_NAME,

C.OWNER

FROM   ALL_CONS_COLUMNS A,

ALL_CONSTRAINTS C

WHERE  A.CONSTRAINT_NAME = C.CONSTRAINT_NAME

AND    C.CONSTRAINT_TYPE = 'R'

AND    C.OWNER = 'MyDBLoginName';

我认为我需要在条件AND C.OWNER = MyDBLoginName处再添加一个。否则,如果我仅使用您的代码,它将列出太多列,其中C.OWNER为SYS,SYSTEM,HR等,这不是我想要的。

您还可以输出参考表和参考列吗?

我的解决方案做到了:)

@ hemalp108:我认为您在join子句中缺少条件。约束名称不是唯一的交叉模式,如果您有2个具有相同Constraint_name的模式,则将匹配不相关的行。您应该添加一个AND A.OWNER=C.OWNER。

@LauDec是的,您的最后一个解决方案是我想要的。我可以知道您如何提出该解决方案吗?有没有建议的参考文件供我参考,因此我可以像您一样编写解决方案?

@CodeContributor我整天都在oracle目录视图中:)但是我使用的视图的文档可以在docs.oracle.com/cd/B28359_01/server.111/b28320/和docs.oracle.com/中找到cd / B28359_01 / server.111 / b28320 /

oracle 所有外键约束,如何在oracle中找到所有外键约束?相关推荐

  1. 如何在AngularJS中使用ng-repeat迭代键和值?

    本文翻译自:How to iterate over the keys and values with ng-repeat in AngularJS? In my controller, I have ...

  2. 如何在python中找到两个日期时间对象之间的时差?

    本文翻译自:How do I find the time difference between two datetime objects in python? 如何分辨两个datetime对象之间的时 ...

  3. 如何在Go中找到一个对象的类型?

    本文翻译自:How to find a type of an object in Go? How do I find the type of an object in Go? 如何在Go中找到对象的类 ...

  4. 如何在 R 中找到 F 临界值

    当您进行 F 检验时,您将获得 F 统计量作为结果.要确定 F 检验的结果是否具有统计显着性,可以将 F 统计量与 F 临界值进行比较.如果 F 统计量大于 F 临界值,则检验结果具有统计显着性. F ...

  5. rstudio中位数的公式_如何在R中找到中位数

    rstudio中位数的公式 In this tutorial, let's learn how we can find the median in R. Median is defined as th ...

  6. oracle中dbms_如何在DBMS中找到关系的最高范式?

    oracle中dbms To find the highest normal form of a relation, you have to first understand the basics o ...

  7. java map判断是否有键_检查Java HashMap中是否存在给定键

    使用该containsKey()方法并检查HashMap中是否存在给定键. 让我们首先创建HashMap并添加一些元素-//创建一个哈希映射 HashMap hm = new HashMap(); / ...

  8. java整数的因式分解_如何在Java中找到整数的质数-因式分解

    java整数的因式分解 编程课程中的常见家庭作业/任务之一是关于Prime Factorization. 要求您编写一个程序以找到给定整数的素因子 . 一个数字的素数因子是将精确地除以给定数字的所有素 ...

  9. 如何在Java中找到整数的质因数–因式分解

    编程课程中的常见家庭作业/任务之一是关于Prime Factorization. 要求您编写一个程序以找到给定整数的素因子 . 一个数字的质数因子是将精确地除以给定数字的所有质数. 例如,35的素数因 ...

最新文章

  1. window系统安装redis步骤
  2. document.body.clientHeight与document.documentElement.clientHeight
  3. C语言实现encode和decode
  4. 【Prometheus】存储
  5. bzoj1202[HNOI2005]狡猾的商人
  6. fla 走迷宫游戏 源码_迷宫新玩法,果断一试
  7. 开发成本谁更高:Android PK iOS
  8. Android 8.0 学习(14)---Android8.0适配分析
  9. SAP自学指南:案例公司的SAP解决方案
  10. Java开发手册!java项目描述模板,挥泪整理面经
  11. 《经营的本质》序“经营的逻辑”--读后感及读书笔记
  12. 智能合约实现简单投票系统
  13. 亚马逊EC2服务器链接方式
  14. WiFi认证—分析从连接WiFi到上网的全过程(一)
  15. AlphaGo之父戴密斯·哈萨比斯:是天才,也是生活里的普通人
  16. 台式机的无线网卡连接wifi,能连上但丢包严重,无法上网
  17. 别被别人抢走了你的时间
  18. 实战技能分享,如何让工程代码各种优化等级通吃,含MDK AC5,AC6,IAR和GCC
  19. Linux下JIRA版本5.0.1的安装.破解.汉化
  20. UE4家装系统工程源码/内含模型/材质/模型拖拽

热门文章

  1. python电源自动化测试仪器经销商_自动测试系统_电源自动测试系统_ATE自动测试设备_自动化测试系统...
  2. 河南省高清地形图-大图
  3. Arcgis pro中Arcpy对Excel文件进行克里金插值
  4. 金博医药WMS仓储管理系统的功能特点
  5. 成都大数据研究院的职责及发展规划
  6. QTabWidget
  7. 矩阵论 内积空间几何表示图解
  8. 2022年起重机司机(限桥式起重机)考试练习题及答案
  9. 激动人心!昨晚,这场盛会在青岛开幕!
  10. TCP 滑动窗口的简介