研究方法:為測試表建立 insert,delete,update 對應的after,before觸發器,在觸發器中訪問當前表,然後執行測試的 insert,delete,update 語句觸發這個觸發器, 檢視是否有異常:
ora-04091: table yc.tr1 is mutating, trigger/function may not see it
1. 建表,並插入測試資料
create table tr1
(id number,name varchar2(10));
insert into tr1 values(1,'a');
2.建立觸發器並執行測試
create or replace trigger tr1_bu
before update on tr1 for each row
declare
a number;
begin
select id into a from tr1 where id = 1;
end;
-- 執行
update tr1 set name='b' -- 報錯
drop trigger tr1_bu;
create or replace trigger tr1_au
after update on tr1 for each row
declare
se number;
begin
select id into se from tr1 where id =1;
end;
--執行
update tr1 set name = 'b' where id = 1 --報錯
create or replace trigger tr1_ai
after insert on tr1 for each row
declare
a number;
begin
select id into a from tr1 where id = 1;
end;
--執行
insert into tr1 values(2,'b'); --報錯
create or replace trigger tr1_bi
before insert on tr1 for each row
declare
a number;
begin
select id into a from tr1 where id = 1;
end;
--執行
insert into tr1 values(2,'b'); --成功
insert into tr1
select 1,'a' from dual -- 報錯
create or replace trigger tr1_ad
after delete on tr1 for each row
declare
a number;
begin
select id into a from tr1 where id = 1;
end;
--執行
delete from tr1 where id = 2 --報錯
drop trigger tr1_ad;
create or replace trigger tr1_bd
before delete on tr1 for each row
declare
a number;
begin
select id into a from tr1 where id =1;
end;
--執行
delete from tr1 where id = 2 --報錯
總結: 只有在before insert觸發器中才能編寫訪問當前表資料的sql語句,但是前提是用普通insert語句觸發這個觸發器,否則如果用insert select 來觸發這個觸發器,就會出錯
關於TabControl的Trigger 專案
我有乙個tabcontrol tabcontrol x name toolsystemsection grid.row 4 contenttemplate issynchronizedwithcurrentitem true itemcontainerstyle itemssource style ...
檢視建立trigger的語句
在plsql dev中沒有許可權檢視trigger時,可以用下面的sql。select from dba triggers t where t.table name table name 顯示的列有 owner trigger name trigger type trigger event tabl...
不同型別Trigger的選擇
1.trigger 一般用於實現每隔一定時間執行任務,以及重複多少次,如每 60 秒執行一次,重複執行 6 次。問題 1 在使用過程中發現設定執行6次其實是執行7次,有一次是在開始執行的第 0 秒執行了一次,然後根據執行間隔再執行給定的執行次數。2 當有 misfired 的任務並且恢復執行時,該執...