♣
题目部分
在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程序员面试笔试宝典》,作者:李华荣。