Oracle

在 Oracle 中獲取對對象的引用的正確方法?

  • August 19, 2021

我想找到所有引用我的對象的對象。

我想出了這個查詢,這是獲取對對象的所有引用的最佳方法嗎?(我知道這不包括約束,我單獨處理)

直接引用對象

SELECT object_id, owner, object_name, object_type
      FROM sys.DBA_OBJECTS  
      WHERE object_id IN (select object_id
                          from public_dependency
                          where REFERENCED_OBJECT_ID = :id_object)
      ORDER BY object_name

另外,在網際網路上,我遇到瞭如下查詢。

對對象的直接和間接引用

SELECT object_id, owner, object_name, object_type
      FROM sys.DBA_OBJECTS  
      WHERE object_id IN (SELECT object_id
                          FROM public_dependency 
                          CONNECT BY PRIOR object_id = referenced_object_id
                          START WITH referenced_object_id = :objectId)

但是,如果我的理解是正確的,則此查詢不僅返回直接引用,還返回間接依賴。

例如,如果我想要 object_A 的引用。如果 object_B 引用了它,並且 object_C 引用了 object_B。此查詢將返回 object_B 和 object_C 作為對 object_A 的引用。我對嗎?

在與一些在 Oracle 方面比我有更多經驗的人交談後,他們告訴我我的理解是正確的。

此查詢返回對對象的引用(約束除外)

SELECT object_id, owner, object_name, object_type
      FROM sys.DBA_OBJECTS  
      WHERE object_id IN (select object_id
                          from public_dependency
                          where REFERENCED_OBJECT_ID = :id_object)
      ORDER BY object_name
選擇referenced_owner || '。' || referenced_name 作為 table_name,
referenced_type 作為類型,
所有者 || '。' || 名稱為引用對象,
類型為引用類型
來自 sys.all_dependencies
其中 referenced_type in('TABLE', 'VIEW')
和 referenced_name = '[TABLE_NAME]' - 把你的表/視圖名稱放在這裡
和referenced_owner = '[OWNER]'
按引用對象排序;

引用自:https://dba.stackexchange.com/questions/100985