【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程序员面试笔试宝典》,作者:李华荣。