我有一个表backup
,我在其上应用了一个触发器upd_trig
。现在,我放弃了我的表,然后检查了所有关联的触发器/索引是否也将被丢弃或将保留在那里。
当我发现一些讨论here时,他们说Trigger / Index都将被删除,一旦我们放弃我们的表。但是,似乎触发器仍然存在。当我们放弃表格时,任何人都可以解释,到底发生了什么?
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
答案 0 :(得分:5)
该表已被删除,但它位于recycle bin,可以使用闪回命令(flashback ... before drop
]从中恢复。显示为BIN$...
的名称有点赠品。触发器也显示BIN$...
名称,表明它也在回收站中,任何索引都是。
您可以清空回收站以永久删除其中的对象。要立即删除表,而不将其转到回收站,您可以将purge
关键字添加到drop
命令,如in the documentation所述。这也将立即丢弃任何索引和触发器。
如果没有自动删除,那么触发器无论如何都是无关紧要的,因为你无法在丢弃的表上执行任何DML,因此它永远不会触发。如果触发器反对的表被删除。你的触发器很奇怪,它插入到同一个表中。通常,您会在一个表上插入一个触发器插入备份表(好吧,一次使用触发器)。在这种情况下,删除备份表将使实时表上的触发器无效,但不会丢弃它。只有删除实时表才会将触发器放在实时表中。