SQL> CREATE TABLE T (ID NUMBER);
SQL> CREATE OR REPLACE TRIGGER T BEFORE INSERT ON T FOR EACH ROW BEGIN NULL; END;
SQL> DROP TABLE T;
SQL> PURGE TABLE T;
ORA-38307: 對象不在回收站中
但查詢 RECYCLEBIN 明顯存在:
OBJECT_NAME ORIGINAL_NAME TYPE
------------------------------ -------------- ------
BIN$+CjKdYw1T2+phKc0o+wpyg==$0 T TRIGGER
BIN$0Lhl98NsTUaWFEUUrsVdyg==$0 T TABLE
表與觸發器同名 (T) 進入回收站後,PURGE TABLE T 無法區分要清除哪個物件,導致語法解析失敗。此為 Oracle 10g 已知 Bug。
SQL> CREATE TABLE T (ID NUMBER);
SQL> CREATE OR REPLACE TRIGGER TRI_T BEFORE INSERT ON T FOR EACH ROW BEGIN NULL; END;
SQL> DROP TABLE T;
SQL> PURGE TABLE T;
表已清除。
FLASHBACK TABLE T TO BEFORE DROP;
DROP TABLE T PURGE;
PURGE TABLE "BIN$0Lhl98NsTUaWFEUUrsVdyg==$0";
PURGE RECYCLEBIN;
TRG_ 或後綴 _TRG,避免與表同名。PURGE RECYCLEBIN,優先採用方案 1 或 2。