Sql 如何查看表列表和触发器列表(以及序列)?

Sql 如何查看表列表和触发器列表(以及序列)?,sql,oracle,triggers,sequence,Sql,Oracle,Triggers,Sequence,在我的数据库中有很多序列、触发器和表。每当哪个表与哪个触发器(和序列)关联时,我都会感到困惑。如何在单个查询中查看这些列表 您可以从依赖关系表中获取此详细信息 select * from user_dependencies where (referenced_type like 'TRIGGER' OR referenced_type = 'SEQUENCE') and type = 'TABLE'; 在sql server中,可以使用sys.triggers和sys.tables,如

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

您可以从依赖关系表中获取此详细信息

select * from user_dependencies where (referenced_type like 'TRIGGER' OR 
 referenced_type = 'SEQUENCE') and type = 'TABLE';

在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

在oracle中,您无法找到在哪个表上使用的序列,它在表级别上没有关联。为此,您需要查找代码,并搜索使用它的序列,可能是在插入触发器之前使用的,也可能是在PL/SQL代码中使用的

对于触发器,您可以看到数据字典视图

select table_name,
       trigger_name as object_name,
       'TRIGGER' object_type 
from ALL_TRIGGERS
编辑 我找到序列的方法是

  • 假设我想检查“Seq_ID”的使用位置
  • 选择*来自dba_源,其中较低的(文本)如“%seq_id.nextval%”
  • 这将告诉我引用序列的代码,您可能可以在代码中找到insert语句,从中可以找到该序列与哪个表关联
  • 或者它会给你触发器代码,从触发器你可以找到哪个表被引用

  • 您可以使用以下语句找到触发器和序列

        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中的序列和表之间没有关系,因此没有列出依赖项
    用户依赖项
    。要获取与表相关的触发器,条件必须是反过来的
    type='TRIGGER'和referenced\u type='table'
    。顺便说一句:在没有通配符的情况下使用像一样的
    是没有任何意义的。它是模式中的触发器和表。如果不是,则使用带有模式过滤器的所有依赖项表。问题显然是关于Oracle的。我认为,无论这是Oracle问题,解决方案都适用于sql server。请投票鼓励我成为新来的……对不起,但是为什么我要投票给一个对提问者不起作用的答案呢?@Alex Poole我看到了,但它显示了零行selected@guruv那么,如何查看哪个表与哪个序列关联?@user2801653:请查找编辑部分GUD,但在脚本结果中仅显示当前支持的5000行的列结尾