如何使用触发器内使用的所有表的列表获取触发器列表。意味着双
1)触发器创建表
2)触发逻辑内部使用的表格?
请在oracle以及sql server中提供解决方案吗?
答案 0 :(得分:2)
您可以使用ALL_TRIGGERS
和ALL_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;