oracle update触发器如何获取被修改的字段
即使:new和:old值没有变化比如:tab表中字段a=1,b=2,c=3,d=4,执行了SQL语句:updatetabseta=1,c=3,怎么在该表的UPDATE触发...
即使:new和:old值没有变化 比如:tab表中字段a=1,b=2,c=3,d=4,执行了SQL语句:update tab set a=1,c=3,怎么在该表的UPDATE触发器中知道修改了字段a和c的值?
业务逻辑:
只要更新了字段a一次,不管a更新前后值是否一致,都让d=d+1,比如依次执行以下语句:
update tab set a=2,c=33; --此时触发器中执行::new.d:=:old.d+1;
update tab set a=2; --触发器中执行::new.d:=:old.d+1;
update tab set c=333; --触发器不执行:new.d:=:old.d+1;
update tab set b=22,c=333; --触发器不执行::new.d:=:old.d+1;
update tab set a=1,b=222; --触发器执行::new.d:=:old.d+1; 展开
业务逻辑:
只要更新了字段a一次,不管a更新前后值是否一致,都让d=d+1,比如依次执行以下语句:
update tab set a=2,c=33; --此时触发器中执行::new.d:=:old.d+1;
update tab set a=2; --触发器中执行::new.d:=:old.d+1;
update tab set c=333; --触发器不执行:new.d:=:old.d+1;
update tab set b=22,c=333; --触发器不执行::new.d:=:old.d+1;
update tab set a=1,b=222; --触发器执行::new.d:=:old.d+1; 展开
5个回答
展开全部
多写几个if判断就可以实现。如
创建测试表及插入数据:
create table test
(id int,
name varchar2(10),
money int);
insert into test values (1,'张三',100);
insert into test values (2,'李四',29);
insert into test values (3,'王五',50);
insert into test values (4,'赵六',56);
commit;
创建触发器:
create or replace trigger t_test
before update
on test
for each row
begin
if updating ('name')
then dbms_output.put_line('name字段被修改');
elsif updating ('money')
then dbms_output.put_line('money字段被修改');
end if;
end;
执行update语句,进行测试:
update test set name='哈哈' where id=1;
commit;
结果截图:
2011-11-03
展开全部
触发器中用:old变量取对应的字段值出来判断,:old.a,:old.c
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
create or replace trigger aaa
after update on tab
for each row
for each row就会捕获到你任何update 不管相同与否
after update on tab
for each row
for each row就会捕获到你任何update 不管相同与否
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在update触发器中用of来实现
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以写啊,sample if(:new.a != :old.a) then dbms_output.put_line('a改变') end if;
if updating('a') then dbms_output.put_line('a改变') end if;
--试试第二个;
if updating('a') then dbms_output.put_line('a改变') end if;
--试试第二个;
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询