一个表TableTest,里面有个字段为OperateTime,现在想做到朝这个表中增加一条记录或者修改一条记录的时候,OperateTime自动为当前的时间,这个触发器应该怎么写?谢谢。

解决方案 »

  1.   

    这个不需要用触发器来做,用default values就可以了
    for example:create table test1( id int,idate date defalut sysdate);
      

  2.   

    谢谢热心的welyngj 默认值的话 新增加记录 没有问题,update的时候呢?现在想不通过修改原有程序的方式,触发器应该可以实现的吧,但是不知道应该怎么写?
      

  3.   

    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;
      

  4.   

    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; 
      

  5.   

    也可以不用触发器,建表的时候默认值修改数据的时候,同时也将OperateTime字段修改为sysdate
      

  6.   

    welyngj,不行啊,会报错ORA-04084:无法更改此触发器类型的NEW值
      

  7.   

    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;
      

  8.   


    welyngj 还记得上次的一个触发器同样不能识别:new的问题吧。这里如果要修改:new的值,只能是在before的trigger中,所以把
    AFTER INSERT OR UPDATE  ON TableTest 改为
    BEFORE INSERT OR UPDATE  ON TableTest
    即可。