【发布时间】:2013-09-30 22:40:04
【问题描述】:
在我的数据库中有很多序列、触发器和表。每次哪个表与哪个触发器(和序列)相关联时,我都会感到困惑。如何在单个查询中查看这些列表?
【问题讨论】:
-
@Alex Poole 我看到了,但它显示选择了零行
标签: sql oracle triggers sequence
在我的数据库中有很多序列、触发器和表。每次哪个表与哪个触发器(和序列)相关联时,我都会感到困惑。如何在单个查询中查看这些列表?
【问题讨论】:
标签: sql oracle triggers sequence
您可以使用以下语句找到触发器和序列
select
table_name, trigger_name, referenced_name as sequence_name
from
all_triggers
join all_dependencies
on name = trigger_name and referenced_type = 'SEQUENCE'
;
【讨论】:
在 oracle 中,您无法找到在哪个表上使用了哪个序列,它与表级别无关。为此,您需要找到代码,并搜索使用它的序列,可能是在插入触发器之前或在 PL/SQL 代码中使用。
对于触发器,您可以查看数据字典视图
select table_name,
trigger_name as object_name,
'TRIGGER' object_type
from ALL_TRIGGERS
编辑 我查找序列的方法是
【讨论】:
在sql server中,可以使用sys.triggers和sys.tables之类的,
select ta.name AS 'TableName', tg.name 'TriggerName' from sys.triggers tg
INNER JOIN sys.tables ta ON tg.parent_id = ta.object_id
【讨论】:
您可以从依赖表中获取此详细信息。
select * from user_dependencies where (referenced_type like 'TRIGGER' OR
referenced_type = 'SEQUENCE') and type = 'TABLE';
【讨论】:
user_dependencies 的依赖关系。并且要获得与表相关的触发器,条件必须与type = 'TRIGGER' and referenced_type = 'TABLE' 相反。顺便说一句:在没有通配符的情况下使用 LIKE 没有任何意义。