【DB笔试面试541】在Oracle中,如何查找存储过程或视图中引用了哪些基表?

  • 2019 年 10 月 10 日
  • 筆記

题目部分

在Oracle中,如何查找存储过程或视图中引用了哪些基表?

答案部分

可以查询DBA_DEPENDENCIES视图,该视图记录了对象与对象之间的依赖关系,NAME列为当前对象,而REFERENCED_NAME为其依赖的基对象。所以,该视图也可以查询某个表被哪些对象所引用,从而知道该表是否可以被删除。

下例展示了DBA_SQL_PLAN_BASELINES视图依赖的对象:

  SH@PROD1> SELECT D.OWNER,    2         D.NAME,    3         D.TYPE,    4         D.REFERENCED_OWNER,    5         D.REFERENCED_NAME,    6         D.REFERENCED_TYPE    7    FROM DBA_DEPENDENCIES D    8   WHERE D.NAME = 'DBA_SQL_PLAN_BASELINES';    OWNER     NAME                           TYPE               REFERENCED_OWNER               REFERENCED_NAME            REFERENCED_TYPE  --------- ------------------------------ ------------------ ------------------------------ -------------------------- ------------------  PUBLIC    DBA_SQL_PLAN_BASELINES         SYNONYM            SYS                            DBA_SQL_PLAN_BASELINES     VIEW  SYS       DBA_SQL_PLAN_BASELINES         VIEW               SYS                            SQLOBJ$AUXDATA             TABLE  SYS       DBA_SQL_PLAN_BASELINES         VIEW               SYS                            SQLOBJ$                    TABLE  SYS       DBA_SQL_PLAN_BASELINES         VIEW               SYS                            SQL$TEXT                   TABLE  

可以看到,公共同义词DBA_SQL_PLAN_BASELINES依赖于和其同名的视图,而DBA_SQL_PLAN_BASELINES视图依赖于SYS.SQLOBJ$AUXDATA、SYS.SQLOBJ$和SYS.SQL$TEXT这3个基表。

& 说明:

有关Oracle数据字典的更多内容可以参考我的BLOG:http://blog.itpub.net/26736162/viewspace-2153324/

本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。