【问题标题】:how to see list of tables and list of trigger(and sequences)? [duplicate]如何查看表列表和触发器列表(和序列)? [复制]
【发布时间】:2013-09-30 22:40:04
【问题描述】:

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

【问题讨论】:

  • @Alex Poole 我看到了,但它显示选择了零行

标签: sql oracle triggers sequence


【解决方案1】:

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

    select 
         table_name, trigger_name, referenced_name as sequence_name
    from 
        all_triggers 
   join all_dependencies 
   on name = trigger_name and  referenced_type = 'SEQUENCE'
    ;

【讨论】:

  • gud 但显示列末尾 脚本结果中当前仅支持 5,000 行
【解决方案2】:

在 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. 或者它会给你触发器代码,你可以从触发器中找到引用了哪个表。

【讨论】:

  • @guruv 那么如何查看哪个表与哪个序列相关联?
  • @user2801653:请找到编辑部分
【解决方案3】:

在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 的。
  • 我认为,无论这是 oracle 问题,解决方案都适用于 sql server。请投票鼓励我作为新人...
  • 对不起,但我为什么要投票给一个对提问者不起作用的答案?
【解决方案4】:

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

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

【讨论】:

  • 您的正在显示的行已选择
  • Oracle 中的序列和表之间没有关系,因此没有列出 user_dependencies 的依赖关系。并且要获得与表相关的触发器,条件必须与type = 'TRIGGER' and referenced_type = 'TABLE' 相反。顺便说一句:在没有通配符的情况下使用 LIKE 没有任何意义。
  • 是您架构中的触发器和表。如果没有,则使用带有模式过滤器的 all_dependencies 表。
猜你喜欢
  • 2016-03-26
  • 1970-01-01
  • 1970-01-01
  • 2021-06-19
  • 1970-01-01
  • 2018-12-15
  • 2021-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多