今天在測試的時候無意中發現了乙個10g的小bug。當包含同名觸發器的表被放入**站時,purge table會報錯。
例子如下:
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;
purge table t
*第 1 行出現錯誤:
ora-38307: 物件不在**站中
查詢**站,可以發現t表:
sql> select object_name, original_name, type from recyclebin;
object_name original_name type
------------------------------
bin$+cjkdyw1t2+phkc0o+wpyg==$0 t trigger
bin$0lhl98nstuawfeuursvdyg==$0 t table
閃回操作並不受影響,而且這種表如果直接刪除並purge也不會出錯。
sql> flashback table t to before drop;
閃回完成。
sql> drop table t purge;
表已刪除。
問題出在同名的觸發器上,如果沒有觸發器,或者觸發器與表名不相同的話,則不存在問題:
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;
表已清除。
錯誤的解決方法很多,除了上面的先閃回在直接刪除外,還可以在purge table的時候指定**站中的名稱,或者採用直接purge recyclebin的方式清除(這種方法會將當前使用者下recyclebin中所有的物件清除)。
mysql 觸發器 臨時表 Mysql觸發器
mysql觸發器 1.建立觸發器 注意 觸發器只能建立在永久表上,不能對臨時表建立觸發器,語法如下 create trigger trigger name trigger time trigger event on table name for each row trigger stmt trigg...
觸發器及觸發器的作用
觸發器是一種用來保障參照完整性的特殊的儲存過程,它維護不同表中資料間關係的有關規則。當對指定的表進行某種特定操作 如 insert,delete或update 時,觸發器產生作用。觸發器可以呼叫儲存過程。建立觸發器的語法 create trigger owner.觸發器名 on owner.表名 f...
觸發器臨時表Inserted deleted
觸發器語句中使用了兩種特殊的表 deleted 表和 inserted 表。microsoft sql server 2000 自動建立和管理這些表。可以使用這兩個臨時的駐留記憶體的表測試某些資料修改的效果及設定觸發器操作的條件 然而,不能直接對錶中的資料進行更改。inserted和deleted表...