【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程式設計師面試筆試寶典》,作者:李華榮。