如何实现表中一个字段更新触发另一个字段的更新(触发器或者其他的方法)

[复制链接]
查看11 | 回复8 | 2005-10-30 17:05:33 | 显示全部楼层 |阅读模式
create table a
( name varchar2(20), riqi date);
insert into a(name,riqi)values('a1',sysdate);
insert into a(name,riqi)values('a2',sysdate);
insert into a(name,riqi)values('a3',sysdate);
想实现:在update a set name='a'||name where name='a1'时,能自动触发以下语句:update a set riqi=sysdate;

问题:现在项目中每个表都要增加一个字段来记录该记录最后一次插入或者更新的时间,如果修改程序修改量非常大,所以想通过触发器或者存储过程来实现,但oracle好像又不支持同一个表的一个字段触发另一个字段的更新,只好求助各位了!
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
可能说的还不清,我本来想通过下面的触发器来实现,可在update a set name='a'||name where name='a1'时提示出错了.
create or replace trigger mytest
before update of name on a referencing old as old new as new
for each row
begin
update a set riqi=sysdate where :new.id=

ld.id;
end;
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
直接用
:new.riqi := sysdate;
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
谢谢,不过你的好想不能通过吧。我已经把sql语句写出来了,麻烦你回复的时候试一下!
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
最初由 snowy_howe 发布
[B]直接用
:new.riqi := sysdate; [/B]

正解
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
既然是同一个表中的列,那就不要用TRIGGER
直接跟在哪个语句后面就得啦
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
最初由 accelerator 发布
[B]
正解 [/B]

可我的计算机上运行失败啊!
就是在update的时候提示sql错误
后来就用
select sysdate into :NEW.riqi from dual;
实现,一切OK!
谢谢各位了!
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
最初由 zonelive 发布
[B]既然是同一个表中的列,那就不要用TRIGGER
直接跟在哪个语句后面就得啦 [/B]

是啊,这样做较好.
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
如果在项目初期,这样或许是比较好的办法。可我现在已经临到项目末期了,能最少量的修改程序当然是最好的选择了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行