在我的数据库中有很多序列、触发器和表。每次哪个表与哪个触发器(和序列)相关联时,我都会感到困惑。如何在单个查询中查看这些列表?
问问题
423 次
4 回答
1
在 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
于 2013-09-25T11:32:31.957 回答
0
您可以使用以下语句找到触发器和序列
select
table_name, trigger_name, referenced_name as sequence_name
from
all_triggers
join all_dependencies
on name = trigger_name and referenced_type = 'SEQUENCE'
;
于 2013-09-25T12:02:25.537 回答
0
在 oracle 中,您无法找到在哪个表上使用了哪个序列,它与表级别无关。为此,您需要找到代码,并搜索使用它的序列,可能是在插入触发器之前或在 PL/SQL 代码中使用。
对于触发器,您可以查看数据字典视图
select table_name,
trigger_name as object_name,
'TRIGGER' object_type
from ALL_TRIGGERS
编辑 我找到序列的方式是
- 假设我想检查“Seq_ID”的使用位置。
- Select * from dba_source where lower(text) like '%seq_id.nextval%';
- 这将告诉我引用序列的代码,可能您可以在代码中找到插入语句,从中您可以发现该序列与哪个表相关联
- 或者它会给你触发代码,从触发器中你可以找到引用了哪个表。
于 2013-09-25T11:33:37.087 回答
0
您可以从依赖表中获取此详细信息。
select * from user_dependencies where (referenced_type like 'TRIGGER' OR
referenced_type = 'SEQUENCE') and type = 'TABLE';
于 2013-09-25T11:31:57.890 回答