關於trigger的muting table異常

2021-04-26 06:42:54 字數 1996 閱讀 5953

研究方法:為測試表建立 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 的任務並且恢復執行時,該執...