如何获取触发器列表,其中包含触发器内使用的所有表的列表

时间:2015-10-05 06:34:04

标签: sql sql-server oracle sql-server-2008 oracle11g

如何使用触发器内使用的所有表的列表获取触发器列表。意味着双 1)触发器创建表
2)触发逻辑内部使用的表格?
请在oracle以及sql server中提供解决方案吗?

2 个答案:

答案 0 :(得分: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;

这是针对Oracle的(我不知道在SQL Server中是如何完成的。我猜它非常相似.SQL Server也会有系统表,你可以从中获取这些信息)。

答案 1 :(得分: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;