2013-04-02 77 views
2

我有一個表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 

回答

5

表已被刪除的表,但它是在recycle bin,從中可以使用閃回命令(flashback ... before drop]恢復。名稱顯示因爲BIN$...有點不值錢,觸發器還顯示一個BIN$...的名稱,表明它也在回收站中,並且任何索引都會被刪除。

您可以清空回收站以永久刪除如果要立即刪除一個表,而不需要它進入回收站,則可以將關鍵字purge添加到drop命令,如解釋in the documentation。這也會立即刪除任何索引和觸發器。


如果它不會被自動刪除,則觸發將是無關緊要無論如何,因爲你不能對刪除的表執行任何DML,所以它不可能火災。這就是如果該表的觸發器是而不是被丟棄。你的觸發器很奇怪,它插入到同一張表中。通常情況下,你可以在一個表上插入一個觸發器到你的備份表中(當然也可以使用觸發器)。在這種情況下,刪除備份表將使無效活動表上的觸發器,但不會丟棄它。只有放下活動表格纔會在活動表格上放置觸發器。

+0

但我的問題仍未得到答覆,無論是否放棄與我的表相關的觸發器/索引。 ? – Ravi

+0

@jWeavers - 它確實會丟棄,但如果已配置,它們也會將其放入回收站。更新了答案....是否更清晰? –

+0

確定它..意味着觸發器不可用,因爲它是。我在桌子上應用的觸發器與我的表一起被刪除,目前它正從oracle的回收站中顯示出來。 – Ravi

相關問題