Oracle
在 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
另外,在網際網路上,我遇到瞭如下查詢。
對對象的直接和間接引用
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]' 按引用對象排序;