Oracle怎么查看表被数据库中那些object使用

      今天看到一个很有趣的问题,怎么查看一个table被数据库中那些object使用?原问题的链接如下:

      http://www.itpub.net/forum.php?mod=viewthread&tid=1849997&extra=page%3D1%26filter%3Dtypeid%26typeid%3D37%26typeid%3D37

      出于好奇,我搜索了下,个人认为可以很好的回答上面的问题。

 

     (一)正常情况(无动态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'))

  

    如果有朋友说,我只想要看表被那些表外键引用了,怎么办呢?

    参考了链接:

    http://stackoverflow.com/questions/1143728/how-can-i-find-which-tables-reference-a-given-table-in-oracle-sql-developer

    查看外键引用的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

    

     希望对各位有用。

     全文完。

  

  

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值