我要对一张表,在写的SQL语句时更新第二个字段,触发器自动更新第三个字段(需求是时间),结果提示
ora-04098:触发器“tri_key”无效且未通过重新确认。
--对自身表触发修改
--创建表
drop table test_4;
create table test_4
(
aa varchar2(10),
bb varchar2(10),
cc varchar2(10)
);
--第一步:创建程序包,设立全局变量
create or replace package proc_testtrigger
is
p_aa test_4.aa%type;
begin
null;
end proc_testtrigger;
/
--第二步:创建行触发器,将key值存入全局变量中
create or replace trigger tri_key
after update on test_4 for each row
begin
proc_testtrigger.p_aa := :new.aa;
end tri_key;
/
--第三步:创建表触发器,根本全局变量更新数据
create or replace trigger tri_upd
after update on test_4
begin
update test_4 set cc = 'zhi' where aa = proc_testtrigger.p_aa;
end tri_upd;
/
--插入数据
insert into test_4 (aa, bb, cc) values ('a', 'b', '');
insert into test_4 (aa, bb, cc) values ('a', 'c', '');
insert into test_4 (aa, bb, cc) values ('a', 'e', '');
--SQL语句,更新语句 ,想实现在更新的同时,触发器更新CC字段
update test_4 set bb = 'gggg' where aa = 'a';
自身表触发修改,ORA-04098 UPDATE
------解决方案--------------------
其实包和第一个触发器我不知道你干嘛用的 完全可以去掉:
触发器这么写就可以了:
create or replace trigger tri_upd
before update on test_4
for each row
begin
:new.cc := 'zhi';
end tri_upd;