如果我更新ACK或ReJ列,它應該使用相同的GlobalID更新所有其他列。使用觸發器更新後更新同一表中的多行
create table t_emp(
empid varchar2(10) not null,
empname varchar2(50),
Dep varchar2(50),
ACk number(5),
REJ number(5),
globalID varchar2(10) default '0'
);
insert into t_emp t values ('TM01' , 'Logu','Java',null,null,'01');
insert into t_emp t values ('BT01' , 'Logu','Java' ,null,null,'01');
insert into t_emp t values ('Oracle01' , 'Logu','DBA' ,null,null,'01');
insert into t_emp t values ('Google01' , 'Logu','Design' ,null,null,'0');
insert into t_emp t values ('AR02' , 'Uthaya','CRM' ,null,null,'02');
insert into t_emp t values ('RIL02' , 'Uthaya','Java' ,null,null,'02');
insert into t_emp t values ('EA02' , 'Uthaya','DBA' ,null,null,'02');
insert into t_emp t values ('TCS02' , 'Uthaya','Java' ,null,null,null);
insert into t_emp t values ('P05' , 'Krish','.Net' ,null,null,'05');
insert into t_emp t values ('TCS06' , 'Krish','.Net' ,null,null,'06');
insert into t_emp t values ('IBM06' , 'Krish','.Net' ,null,null,'06');
CREATE OR REPLACE TRIGGER t_emp_update
AFTER UPDATE
ON t_emp
FOR EACH ROW
DECLARE
t_Ack varchar2(15);
t_Rej varchar2(15);
t_globalID varchar2(10);
t_empid varchar2(10);
BEGIN
t_globalID := :new.globalID;
t_Ack := :new.ACk;
t_Rej := :new.REJ;
t_empid := :new.empid;
IF t_Ack is not null then
DBMS_OUTPUT.PUT_LINE('t_Ack := ' || t_Ack || ', t_globalID := '|| t_globalID ||', t_empid := '||t_empid);
update t_emp set ACk = t_Ack where globalID = t_globalID and empid != t_empid;
end if;
IF t_Rej is not null then
DBMS_OUTPUT.PUT_LINE('t_REJ := ' || t_Rej || ', t_globalID := '|| t_globalID ||', t_empid := '||t_empid);
update t_emp set Rej = t_Rej where globalID = t_globalID and empid != t_empid;
end if;
END;
update t_emp v set Rej = 1 where empid = 'TCS06';
如果我更新empid = 'TCS06'
應該在內部更新所有行具有相同的globalID(06)。
select * from t_emp order by empname,globalID;
我在這個觸發器中收到一些錯誤。
ORA-04091: table TEST1.T_EMP is mutating, trigger/function may not see it
ORA-06512: at "TEST1.T_EMP_UPDATE", line 17
ORA-04088: error during execution of trigger 'TEST1.T_EMP_UPDATE'
好心幫我...
謝謝,你我有一個不... 我搬到了應用程序更改... 但我學到了更多有關觸發器.. – Uthay
歡迎您......教導一個人理智,他會一輩子思考;) – Yaroslav