请教一个Oracle中的触发器语句!

huagou 2009-07-13 02:43:01
一个表TableTest,里面有个字段为OperateTime,现在想做到朝这个表中增加一条记录或者修改一条记录的时候,OperateTime自动为当前的时间,这个触发器应该怎么写?谢谢。
...全文
41 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
inthirties 2009-07-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 huagou 的回复:]
welyngj,不行啊,会报错

ORA-04084:无法更改此触发器类型的NEW值
[/Quote]

welyngj 还记得上次的一个触发器同样不能识别:new的问题吧。

这里如果要修改:new的值,只能是在before的trigger中,

所以把
AFTER INSERT OR UPDATE ON TableTest

改为
BEFORE INSERT OR UPDATE ON TableTest
即可。

zl3450341 2009-07-13
  • 打赏
  • 举报
回复
关注
为什么一定要建触发器呢
mr_michael_lee 2009-07-13
  • 打赏
  • 举报
回复
CREATE OR REPLACE TRIGGER tri_OperateTime
BEFORE INSERT OR UPDATE ON TableTest
REFERENCING
NEW AS NEW
OLD AS OLD
FOR EACH ROW
Begin

:new.insert_date := sysdate;

:new.update_date := sysdate;

End;
huagou 2009-07-13
  • 打赏
  • 举报
回复
welyngj,不行啊,会报错

ORA-04084:无法更改此触发器类型的NEW值
ojuju10 2009-07-13
  • 打赏
  • 举报
回复
也可以不用触发器,建表的时候默认值

修改数据的时候,同时也将OperateTime字段修改为sysdate
welyngj 2009-07-13
  • 打赏
  • 举报
回复
try:


CREATE TRIGGER tri_OperateTime
AFTER INSERT OR UPDATE ON TableTest
FOR EACH ROW
begin
IF INSERTING THEN :new.OperateTime :=sysdate; END IF;
IF UPDATING THEN :new.OperateTime :=sysdate; END IF;
end;
ojuju10 2009-07-13
  • 打赏
  • 举报
回复
写个触发器就可以了
welyngj 2009-07-13
  • 打赏
  • 举报
回复
try:


CREATE TRIGGER tri_OperateTime
AFTER INSERT OR UPDATE OF age ON Person
FOR EACH ROW
begin
IF INSERTING THEN :new.idate :=sysdate; END IF;
IF UPDATING THEN :new.idate :=sysdate; END IF;
end;
huagou 2009-07-13
  • 打赏
  • 举报
回复
谢谢热心的welyngj

默认值的话 新增加记录 没有问题,update的时候呢?

现在想不通过修改原有程序的方式,触发器应该可以实现的吧,但是不知道应该怎么写?
welyngj 2009-07-13
  • 打赏
  • 举报
回复
这个不需要用触发器来做,用default values就可以了
for example:

create table test1( id int,idate date defalut sysdate);

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧