如何在Oracle中 查询一个表被其他数据库对象引用[z]
这两天老大让我再oracle中把要替换的表被其他对象引用之处找出来,整理一份表,接到这个任务,我是一脸懵逼,怎么找?大海捞针么?问同事、查资料,自己研究,最后整理一下仅供大家参考,同时以备将来回顾。本篇只涉及表被其他数据库对象引用,不涉及外键,想寻找外键的,自己查看下面附有的链接。
首先有下列几种方式:
1、plsql工具
;
点击工具,找到 查找数据库对象
最后进入到查找页面
最后根据页面把要查找的 表对象或者关键词填入 文本查找 里,再在对象条件里 选择自己要筛选的条件即可筛选。但是此方法有个弊端,就是 所有者 中下拉条件太多,要筛选很多次。
2.通过sql去查询。相关sql我是网上查阅资料,无意中看到有位大哥曾经在自己的博客回答过这个问题,先推荐给大家http://53873039oycg.iteye.com/blog/2030263/。这位大哥,小弟很不好意思在此引用一下您的内容,敬请见谅。
a>正常情况(无动态SQL时)
System/Sysdba用户,可以使用以下SQL查看:
select * from dba_dependencies where referenced_name =upper('对象名') and owner=upper('所有者')
普通用户可以使用以下SQL查看:
select * from all_dependencies where referenced_name =upper('对象名')
b>动态SQL情况
System/Sysdba可以使用下面的SQL查询:
select name,type,text from dba_source where upper(text) like '%对象名%' and owner=upper('所有者')
普通用户可以使用下面的SQL查询:
select name,type,text from user_source where upper(text) like '%对象名%'
查看所有引用表的动态sql:
System/Sysdba用户:
select name, type, text
from dba_source
where name in (select name
from dba_source
where upper(text) like '%对象名%'
and owner = upper('所有者')
minus
select name
from dba_dependencies
where referenced_name = upper('对象名')
and owner = upper('所有者'))
and owner = upper('所有者')
普通用户:
select name, type, text
from user_source
where name in
(select name
from user_source
where upper(text) like '%对象名%'
minus
select name from all_dependencies where referenced_name = upper('对象名'))
好啦,以上就是借鉴那位大哥的,下面奉上小弟修改的
查看所有引用表的动态sql(考虑到实际项目中有的公司可能存储过程或者函数、视图里有的使用对象名是大写有的是小写的参考):
普通用户:
select distinct name, type
from user_source
where name in (select a.name
from user_source a
where a.text like '%对象名小写%' or a.TEXT like '%对象名大写%'
group by a.name
minus
select name
from all_dependencies
where referenced_name = '对象名小写' or referenced_name = '对象名大写' )
所以小编就对比动态和静态情况下sql,发现动态情况下sql中包含了静态情况下的sql,而且用了minus函数,
minus函数是什么呢?有什么作用呢?
给大家普及一下minus函数用法:
racle Minus关键字
SQL中有一个MINUS关键字,它运用在两个SQL语句上,它先找出第一条SQL语句所产生的结果,然后看这些结果有没有在第二个SQL语句的结果中。如果有的话,那这一笔记录就被去除,而不会在最后的结果中出现。如果第二个SQL语句所产生的结果并没有存在于第一个SQL语句所产生的结果内,那这笔资料就被抛弃。
好了,既然知道了minus函数的作用,那我们何不自己写个查询所有的情况(既有静态又有动态的情况)的sql呢,福利来了,那么久整理出了下面的sql,查询的结果包含了对象本身哦。此处小编采用的 UNION ALL 取并集。然后把重复的过滤掉
select distinct name,type
from (select a.name,a.TYPE
from user_source a
where a.text like '%表名小写%' or a.TEXT like '%表名大写%'
group by a.name,a.TYPE
UNION ALL
select name,type
from all_dependencies
where referenced_name = '表名大写' or referenced_name = '表名小写') v
---------------------
作者:m0_37984249
来源:CSDN
原文:https://blog.csdn.net/m0_37984249/article/details/81097867
如何在Oracle中 查询一个表被其他数据库对象引用[z]的更多相关文章
- Linq 中查询一个表中指定的字段
//Linq中查询一个表中指定的几个字段: ); // FindAllItems()为查询对应表的所有数据的方法: // Where 里面为查询条件 // Select 为查询的筛选条件 new{} ...
- mysql中查询一个字段属于哪一个数据库中的哪一个表的方式
mysql中查询一个字段具体是属于哪一个数据库的那一张表:用这条语句就能查询出来,其中 table_schema 是所在库, table_name 是所在表 --mysql中查询某一个字段名属于哪一个 ...
- oracle中查询用户表/索引/视图创建语句
不多说,直接上干货 1.查询当前用户下表的创建语句 select dbms_metadata.get_ddl('TABLE','ux_future') from dual; 2.查询其他用户下表的创建 ...
- 如何在ORACLE中查询某一用户下所有的空表
先分析表 select 'analyze table '||table_name||' compute statistics;' from user_tables; 把查询结果依次执行 把所有表分析一 ...
- Oracle中如何查询一个表的所有字段名和数据类型
Oracle中如何查询一个表的所有字段名和数据类型 查询语法 select A.COLUMN_NAME,A.DATA_TYPE from user_tab_columns A where TABLE_ ...
- oracle中查询某张表都被哪些表参照了
起因: 系统测试的时候发现如果某条记录已经被引用了,这个时候删除这条记录会引起数据不一致,系统会报错.比如警员信息,在考勤记录表里会引用警员ID,如果考勤记录表中已经存在这个警员ID了,这时从警员表中 ...
- SQL查询一个表中类别字段中Max()最大值对应的记录
SQL查询一个表中类别字段中Max()最大值对应的记录 SELECT A.id, A.name, A.version FROM DOC A, (SELECT id, MAX(version) ...
- Oracle中查询当前数据库中的所有表空间和对应的数据文件语句命令
Oracle中查询当前数据库中的所有表空间和对应的数据文件语句命令 ------------------------------------------------------------------ ...
- 关于Oracle中查询的数字值的显示格式需要保留小数点后两位(或者三位,及其他位数)
关于Oracle中查询的数字值的显示格式需要保留小数点后两位(或者三位,及其... 方法一:使用to_char的fm格式,即: to_char(round(data.amount,2),'FM9999 ...
随机推荐
- Oracle VM VirtualBox各种显示模式切换 热键
初用VirtualBox, 几个显示切换快捷键还是要记一下的: Right Ctrl + F -- 切换到全屏模式 Right Ctrl + L -- 切换到无缝模式 Ri ...
- 21.struts-Action配置.md
目录 1.Action开发方式 2.通配符 访问地址 [toc] 3.常量 后缀 指定默认编码集,作用于HttpServletRequest的setCharacterEncoding方法和freema ...
- Roslyn Cookbook
Roslyn Cookbook by Manish Vasani Publisher: Packt Publishing Release Date: July 2017 ISBN: 978178728 ...
- InvalidArgumentError (see above for traceback): Assign requires shapes of both tensors to match. lhs shape= [2048,38] rhs shape= [2048,2]
做tensorflow object detection 中,清空下checkpoint就可以啦
- MongoDB应用场景
数据记录如下 /* 1 */ { "_id" : ObjectId("5b56dd19a171d7e9bfb03ac1"), "name" ...
- vue 安装sass扩展
1.创建一个基于 webpack 模板的新项目 $ vue init webpack myvue 1 2.在当前目录下,安装依赖 $ cd myvue $ npm install 1 2 3.安装sa ...
- python中的文件的读写
python中的 w+ 的使用方法:不能直接 write() 后,在进行读取,这样试读不到数据的,因为数据对象到达的地方为文件最后,读取是向后读的,因此,会读到空白,应该先把文件对象移到文件首位. f ...
- Pandas基本功能之算术运算、排序和排名
算术运算和数据对齐 Series和DataFrame中行运算和列运算有种特征叫做广播 在将对象相加时,如果存在不同的索引对,则结果的索引就是该索引对的并集.自动的数据对齐操作在不重叠的索引处引入了NA ...
- oracle 调用包体的函数并返回return值
/// <summary> /// 执行数据库包体操作,返回结果 /// </summary> /// <param name="cmdText"&g ...
- WOPI的安装文档方法
Office Web Apps安装部署 系统要求为Windows Server 2012, 注意:安装Office Web Apps的服务器除了Office Web Apps之外,不能安装其他应用.包 ...