0

在我的数据库中有很多序列、触发器和表。每次哪个表与哪个触发器(和序列)相关联时,我都会感到困惑。如何在单个查询中查看这些列表?

4

4 回答 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

编辑 我找到序列的方式是

  1. 假设我想检查“Seq_ID”的使用位置。
  2. Select * from dba_source where lower(text) like '%seq_id.nextval%';
  3. 这将告诉我引用序列的代码,可能您可以在代码中找到插入语句,从中您可以发现该序列与哪个表相关联
  4. 或者它会给你触发代码,从触发器中你可以找到引用了哪个表。
于 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 回答