gpt4 book ai didi

oracle - 当表被删除时,依赖触发器会发生什么?

转载 作者:行者123 更新时间:2023-12-04 00:45:15 29 4
gpt4 key购买 nike

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

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

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

最佳答案

该表已被删除,但它在 recycle bin 中,可以使用闪回命令( flashback ... before drop ] 从中恢复它。显示为 BIN$... 的名称有点泄露。触发器也显示有 BIN$... 名称,表明它也在回收站中,任何索引也将在回收站中。

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

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

关于oracle - 当表被删除时,依赖触发器会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15771252/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com