2015-10-05 48 views

回答

2

你會使用ALL_TRIGGERSALL_DEPENDENCIES找到所有的觸發器與他們不同的表。這是:DBMS所依賴的所有表。因此,在使用動態SQL的情況下,DBMS無法瞭解動態查詢將包含哪些表格,您將錯過這些表格。

select 
    t.owner || '.' || t.trigger_name as trigger_name, 
    t.table_owner || '.' || t.table_name as table_name, 
    (
    select 
     listagg(d.referenced_owner || '.' || d.referenced_name, ', ') 
     within group (order by d.referenced_owner, d.referenced_name) 
    from all_dependencies d 
    where d.owner = t.owner 
    and d.name = t.trigger_name 
    and d.type = 'TRIGGER' 
    and d.referenced_type = 'TABLE' 
    and not (d.referenced_owner = t.table_owner and d.referenced_name = t.table_name) 
) as other_tables 
from all_triggers t; 

這是甲骨文(我不知道如何同在SQL Server完成的。我想這是非常相似的。SQL Server中,也將有系統表,您可以在這裏查到信息)。

1

在Oracle嘗試下面的查詢,從而獲得所需的輸出

SELECT TRIGGER_NAME,TABLE_NAME,TRIGGER_TYPE, TRIGGERING_EVENT, LINE, TEXT 
FROM USER_TRIGGERS UT, USER_SOURCE US 
WHERE UT.TRIGGER_NAME=US.NAME;