2015-10-05 44 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;