oracle 所有外键约束,如何在oracle中找到所有外键约束?
在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中找到所有外键约束?相关推荐
- 如何在AngularJS中使用ng-repeat迭代键和值?
本文翻译自:How to iterate over the keys and values with ng-repeat in AngularJS? In my controller, I have ...
- 如何在python中找到两个日期时间对象之间的时差?
本文翻译自:How do I find the time difference between two datetime objects in python? 如何分辨两个datetime对象之间的时 ...
- 如何在Go中找到一个对象的类型?
本文翻译自:How to find a type of an object in Go? How do I find the type of an object in Go? 如何在Go中找到对象的类 ...
- 如何在 R 中找到 F 临界值
当您进行 F 检验时,您将获得 F 统计量作为结果.要确定 F 检验的结果是否具有统计显着性,可以将 F 统计量与 F 临界值进行比较.如果 F 统计量大于 F 临界值,则检验结果具有统计显着性. F ...
- rstudio中位数的公式_如何在R中找到中位数
rstudio中位数的公式 In this tutorial, let's learn how we can find the median in R. Median is defined as th ...
- oracle中dbms_如何在DBMS中找到关系的最高范式?
oracle中dbms To find the highest normal form of a relation, you have to first understand the basics o ...
- java map判断是否有键_检查Java HashMap中是否存在给定键
使用该containsKey()方法并检查HashMap中是否存在给定键. 让我们首先创建HashMap并添加一些元素-//创建一个哈希映射 HashMap hm = new HashMap(); / ...
- java整数的因式分解_如何在Java中找到整数的质数-因式分解
java整数的因式分解 编程课程中的常见家庭作业/任务之一是关于Prime Factorization. 要求您编写一个程序以找到给定整数的素因子 . 一个数字的素数因子是将精确地除以给定数字的所有素 ...
- 如何在Java中找到整数的质因数–因式分解
编程课程中的常见家庭作业/任务之一是关于Prime Factorization. 要求您编写一个程序以找到给定整数的素因子 . 一个数字的质数因子是将精确地除以给定数字的所有质数. 例如,35的素数因 ...
最新文章
- window系统安装redis步骤
- document.body.clientHeight与document.documentElement.clientHeight
- C语言实现encode和decode
- 【Prometheus】存储
- bzoj1202[HNOI2005]狡猾的商人
- fla 走迷宫游戏 源码_迷宫新玩法,果断一试
- 开发成本谁更高:Android PK iOS
- Android 8.0 学习(14)---Android8.0适配分析
- SAP自学指南:案例公司的SAP解决方案
- Java开发手册!java项目描述模板,挥泪整理面经
- 《经营的本质》序“经营的逻辑”--读后感及读书笔记
- 智能合约实现简单投票系统
- 亚马逊EC2服务器链接方式
- WiFi认证—分析从连接WiFi到上网的全过程(一)
- AlphaGo之父戴密斯·哈萨比斯:是天才,也是生活里的普通人
- 台式机的无线网卡连接wifi,能连上但丢包严重,无法上网
- 别被别人抢走了你的时间
- 实战技能分享,如何让工程代码各种优化等级通吃,含MDK AC5,AC6,IAR和GCC
- Linux下JIRA版本5.0.1的安装.破解.汉化
- UE4家装系统工程源码/内含模型/材质/模型拖拽