4

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

正如我在这里发现的一些讨论,他们说一旦我们删除我们的表,触发器/索引都将被删除。但是,似乎触发器仍然存在。谁能解释一下,当我们放下桌子时到底发生了什么

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
4

1 回答 1

8

该表已被删除,但它在回收站flashback ... before drop,可以使用闪回命令(也在回收站中,任何索引也会。BIN$...BIN$...

您可以清空回收站以永久删除其中的对象。要立即删除表,而不将其放入回收站,您可以将关键字添加purgedrop命令中,如文档中所述。这也将立即删除任何索引和触发器。


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

于 2013-04-02T18:24:13.230 回答