今天看到一个很有趣的问题,怎么查看一个table被数据库中那些object使用?原问题的链接如下:
出于好奇,我搜索了下,个人认为可以很好的回答上面的问题。
(一)正常情况(无动态SQL时)
参考了链接:
http://www.oratable.com/which-objects-refer-to-this-table/
System/Sysdba用户,可以使用以下SQL查看:
select * from dba_dependencies where referenced_name =upper('emp') and owner=upper('tmd')
普通用户可以使用以下SQL查看:
select * from all_dependencies where referenced_name =upper('emp')
上面的区别是可以看的用户范围不同:
DBA_DEPENDENCIES describes all dependencies between objects in the database. This view may only be accessible to users with DBA rights. USER_DEPENDENCIES describes dependencies between objects only in the current user’s schema. This view does not have the column OWNER, as it is contained in the view definition.
上面的运行结果如下:
上面的缺点是如果表名在字符串里面,也就是存在动态执行sql的情况,则得不到对象名称。例子如下:
select * from all_dependencies where name like '%PROC_DBMS%' and referenced_name =upper('emp')
结果如下:
(二)动态SQL情况
对于动态sql只能从源码中查询了。参考了链接:
https://community.oracle.com/thread/517948
System/Sysdba可以使用下面的SQL查询:
select name,type,text from dba_source where upper(text) like '%EMP%' and owner=upper('tmd')
普通用户可以使用下面的SQL查询:
select name,type,text from user_source where upper(text) like '%EMP%'
以上面的例子为例:
select name,type,text from user_source where upper(text) like '%EMP%' and name like 'PROC_DBMS%'
结果如下:
查看所有引用表的动态sql:
System/Sysdba用户:
select name, type, text from dba_source where name in (select name from dba_source where upper(text) like '%EMP%' and owner = upper('tmd') minus select name from dba_dependencies where referenced_name = upper('emp') and owner = upper('tmd')) and owner = upper('tmd')
普通用户:
select name, type, text from user_source where name in (select name from user_source where upper(text) like '%EMP%' minus select name from all_dependencies where referenced_name = upper('emp'))
如果有朋友说,我只想要看表被那些表外键引用了,怎么办呢?
参考了链接:
查看外键引用的SQL如下:
select table_name, constraint_name, status, owner from all_constraints where r_owner = 'TMD' and constraint_type = 'R'--foreign key and r_constraint_name in (select constraint_name from all_constraints where constraint_type in ('P', 'U')--pk unique key --and table_name = 'DEPT' and owner = 'TMD') order by table_name, constraint_name
希望对各位有用。
全文完。
相关推荐
Oracle数据库作为一款强大的关系型数据库管理系统,支持多种类型的数据存储,包括BLOB(Binary Large Object)类型,适合存放图片等二进制文件。 首先,我们需要理解Java在此过程中的作用。Java是一种多平台的编程...
使用以下SQL命令可以查询Oracle数据库中的总连接数: ```sql SELECT COUNT(*) FROM v$session; ``` 这条语句返回的结果即为当前数据库的所有会话数量。 2. **查询并发连接数** 要获取当前正在活跃的会话数量...
结果也被很方便地显示在二维表中.如果允许,您可以直接在查询结果上进行数据编辑并反映到数据库中. 另外,在显示结果的同时,SQL的执行计划和统计信息也被显示出来,这样您可以一边看着...
### Oracle数据库表中修改字段顺序的方法 在Oracle数据库中,我们常常会遇到需要调整表中字段顺序的情况。例如,为了优化查询效率或是更好地符合业务逻辑,我们可能希望更改某些字段的位置。在过去,如果想要改变一...
为了查看当前Oracle数据库中被锁定的表,可以使用以下SQL查询: ```sql SELECT SESS.SID, SESS.SERIAL#, LO.ORACLE_USERNAME, LO.OS_USER_NAME, AO.OBJECT_NAME, LO.LOCKED_MODE FROM V$LOCKED_OBJECT LO, ...
首先,连接Oracle数据库需要引入Oracle的数据提供者——Oracle Managed Data Access (ODP.NET)。安装NuGet包“Oracle.ManagedDataAccess”后,可以使用以下代码创建连接: ```csharp using Oracle....
在Oracle数据库中插入图片涉及到BLOB(Binary Large Object)数据类型,这是Oracle用来存储大量二进制数据,如图片、音频或视频文件等的一种方式。本文将详细介绍如何在Oracle数据库中插入、查询和管理图片。 首先...
在与Oracle数据库配合时,Java开发者经常使用JDBC(Java Database Connectivity)来连接和操作数据库。JDBC为Java提供了标准接口,用于执行SQL语句、获取结果集等。 实体类(Entity Class)是Java代码中的核心部分...
在IT领域,尤其是在数据库管理与操作中,Oracle数据库因其强大的功能和广泛的适用性而备受青睐。其中,数据库链接(DBLINK)是Oracle提供的一种高级特性,用于实现不同Oracle数据库之间的数据交互,尤其适用于数据...
Oracle数据库的性能直接影响到应用程序的响应速度和整体系统效率。以下是一些核心知识点的详细解释: 1. **表空间使用率监控**: 使用SQL查询可以获取每个表空间的使用情况,包括自由空间、已使用空间和总空间。...
在Oracle数据库中,表结构的设计是数据库管理的重要环节。一旦设计完成后,有时因需求变化,我们需要在已有的表中添加新的字段或者调整字段顺序。本文将详细介绍如何在Oracle数据库中修改表字段的顺序。 首先,让...
Oracle数据库是全球广泛使用的大型关系型数据库管理系统,它提供了丰富的功能和高可用性。在多环境或多版本之间进行数据库比对时,可能涉及到表结构、索引、存储过程、触发器、视图、用户权限等多个方面。这款由...
### Oracle 查看表空间使用情况 在Oracle数据库管理中,了解和监控表空间的状态是非常重要的。这不仅能帮助管理员及时发现存储资源不足的情况,还能优化数据分布、提高性能。本文将详细介绍如何通过SQL查询来查看...
本文将详细介绍Oracle数据库的一些主要维护任务,包括使用Oracle Enterprise Manager进行监控、表空间的扩充方法、解决死锁问题以及SPFILE与PFILE的应用。 1. **Oracle Enterprise Manager基本使用** - **启动连接...
批量导出Oracle数据库中的BLOB字段生成图片,是一项常见的需求,尤其对于那些需要将数据库中的图片资源导出到本地文件系统的情况。下面将详细介绍这一过程及其相关知识点。 首先,我们需要理解BLOB类型。BLOB...
《Oracle数据库维护手册》是为相关技术人员提供的一份详尽指南,涵盖了Oracle数据库日常运行维护的各个方面。手册的目的是帮助运维人员高效、准确地管理Oracle数据库系统,确保其稳定、安全运行。 2.1 数据库启动与...
在Oracle数据库管理中,了解如何检测对象被锁的情况至关重要,因为锁定可能会导致数据一致性问题,影响系统的正常运行。本文将详细介绍如何使用提供的脚本`ckobject_lock.sh`和`ckobject_lock.sql`来监控和检测...
在Oracle数据库管理过程中,经常会出现表或行被锁定的情况,这可能会导致应用程序出现性能问题甚至挂起。因此,了解如何判断表是否被锁以及如何解锁是非常重要的技能。 #### 一、判断表是否被锁 1. **SQL查询语句*...
在Oracle数据库管理中,数据库链接(Database Link)是一项关键功能,它允许用户在一个数据库实例上执行操作时,能够访问另一个远程数据库中的数据。这在分布式数据库环境中尤其重要,因为可以促进不同数据库之间的...
SIObject Browser V10允许用户以树状结构清晰地查看Oracle数据库中的所有对象,包括表、视图、索引、存储过程、函数、触发器等。这使得数据库结构的可视化和理解变得简单,对于日常维护和故障排查极其有用。 2. **...