删除表时,依赖触发器会发生什么?

Rav*_*avi 2 oracle triggers drop-table

我有一个表backup,我已经应用了一个触发器upd_trig.现在,我放弃了我的表,然后检查了所有关联的触发器/索引是否也将被丢弃或将保留在那里.

当我在这里发现一些讨论时,他们说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
Run Code Online (Sandbox Code Playgroud)

Ale*_*ole 5

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

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


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