触发器如下:CREATE or replace TRIGGER TEST_DB.add8hour after
INSERT ON TEST_DB.REPOSITORY for each row
declare PRAGMA AUTONOMOUS_TRANSACTION;
begin
update TEST_DB.REPOSITORY set RP_MODIFIED_TIME=:NEW.RP_MODIFIED_TIME+1/3 WHERE :new.RP_ID=(select max(:new.RP_ID) from TEST_DB.REPOSITORY);
commit;
end;目的是update最新insert的数据, 该数据的特征是拥有 RP_ID 的最大值,  但结果是 触发器只能update它的上一条记录,而不是本次的, 该怎么做?

解决方案 »

  1.   

    update TEST_DB.REPOSITORY set RP_MODIFIED_TIME=:NEW.RP_MODIFIED_TIME+1/3 WHERE :new.RP_ID=(select max(RP_ID) from TEST_DB.REPOSITORY); 试试?
      

  2.   

    很怪  如果  select max(RP_ID)  那样改的话连上一条也不更新了
      

  3.   

    新插入的记录,RP_ID是不是最大的?该记录刚刚插入,after触发器即更新它?update TEST_DB.REPOSITORY set RP_MODIFIED_TIME=:NEW.RP_MODIFIED_TIME+1/3 WHERE RP_ID=:new.RP_ID;
      

  4.   

    新插入的记录,RP_ID是不是最大的? ——是的
    该记录刚刚插入,after触发器即更新它?  —— 是这个目的update TEST_DB.REPOSITORY set RP_MODIFIED_TIME=:NEW.RP_MODIFIED_TIME+1/3 WHERE RP_ID=:new.RP_ID;   这样也是一条也不更新,   会不会是在  new 的所取到值上有什么说法,  where 条件不符合?
      

  5.   

    那请指点一下吧   该怎么做,  不用自治事务也行,达到目的就行。不用自治事务的话, 如果after更新同记录是会出错的啊
      

  6.   

    SQL> create table test (id number,time date);表已创建。SQL> CREATE OR REPLACE TRIGGER add8hour
      2  BEFORE INSERT ON test
      3  FOR EACH ROW
      4  DECLARE
      5  BEGIN
      6     :new.time := :NEW.TIME+1/3;
      7  END;
      8  /触发器已创建SQL> show error
    没有错误。
    SQL> insert into test values (1,to_date('2010-01-11 11:11:11','yyyy-mm-dd hh24:m
    i:ss'));已创建 1 行。SQL> select * from test;        ID TIME
    ---------- -------------------
             1 2010-01-11 19:11:11SQL> commit;提交完成。SQL> select * from test;        ID TIME
    ---------- -------------------
             1 2010-01-11 19:11:11SQL> insert into test values (2,to_date('2010-02-22 22:22:22','yyyy-mm-dd hh24:m
    i:ss'));已创建 1 行。SQL> select * from test;        ID TIME
    ---------- -------------------
             1 2010-01-11 19:11:11
             2 2010-02-23 06:22:22SQL> commit;提交完成。SQL> select * from test;        ID TIME
    ---------- -------------------
             1 2010-01-11 19:11:11
             2 2010-02-23 06:22:22SQL>
    before触发器试哈子。
      

  7.   

    我试了你的方法  确实这样触发器是有效的但换到我的系统中就是原值。因为系统是黑盒的,我觉得可能是系统中在insert之后,又update了一次时间,这次正好在触发器之后,所以造成无效。换成了 update触发器  ,  好了....