【问题标题】:What happens to dependent triggers when the table is dropped?当表被删除时,依赖触发器会发生什么?
【发布时间】:2013-03-24 04:03:13
【问题描述】:

我有一张表backup,我在其上应用了一个触发器upd_trig。现在,我删除了我的表,然后检查了所有关联的触发器/索引是否也将被删除或保留在那里。

当我发现一些讨论here 时,他们说一旦我们删除表,触发器/索引都将被删除。但是,似乎触发器仍然存在。谁能解释一下,当我们删除表格时会发生什么

SQL> drop table backup;

Table dropped.

SQL> select text from user_source;

TEXT
----------------------------------------------------------------------------------------------------
TRIGGER
"BIN$Dg5j/bf6Rq6ugyN5ELwQkw==$0" BEFORE UPDATE ON backup FOR EACH ROW
BEGIN
INSERT INTO BACKUP VALUES(USER,:OLD.ENAME,SYSDATE);
END;

9 rows selected.

SQL> select count(*) from user_triggers;

  COUNT(*)
----------
         1

SQL> select trigger_name from user_triggers;

TRIGGER_NAME
------------------------------
BIN$Dg5j/bf6Rq6ugyN5ELwQkw==$0

【问题讨论】:

    标签: oracle triggers drop-table


    【解决方案1】:

    该表已被删除,但它位于 recycle bin 中,可以使用闪回命令 (flashback ... before drop] 从中恢复。显示为 BIN$... 的名称有点赠品。触发器也显示了一个BIN$...的名字,表明它也在回收站里,任何索引都会也在。

    您可以清空回收站以永久删除其中的对象。要立即删除表,而不将其放入回收站,您可以将关键字 purge 添加到 drop 命令,如 in the documentation 所述。这也会立即删除所有索引和触发器。


    如果它没有被自动删除,那么触发器无论如何都是无关紧要的,因为您无法对已删除的表执行任何 DML,因此它永远不会触发。那就是如果触发器 反对 的表被删除。你的触发器很奇怪,它插入到同一个表中。通常你会在一个表上插入一个触发器到你的备份表中(好吧,对于触发器的一种使用)。在这种情况下,删除备份表会使活动表上的触发器无效,但不会删除它。只有删除活动表才会删除活动表上的触发器。

    【讨论】:

    • 但我的问题仍未得到解答,它是否会删除与我的表相关联的触发器/索引。 ?
    • @jWeavers - 它确实会丢弃,但如果已配置,也会将它们放入回收站。更新了答案……是不是更清楚了?
    • 好的,知道了.. 表示触发器不可用。我在我的桌子上应用的触发器被我的桌子丢弃了,目前它正在从 oracle 的回收站中显示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-27
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    相关资源
    最近更新 更多