新建了一张表table1,有个存储过程proc1每天都将table1写入到另一张表table2中,原来都是全量写,随着表中数据增多速度变得很慢,我现在希望能做到增量写,table1中有个字段xgsj(修改时间),table1是如果有新数据就在xgsj上写入新添加时的时间,如果是有修改则修改xgsj为修改的时间,现在问题是在存储过程中不知如何获得上次该存储过程执行时xgsj上的最新时间,请大家帮忙,谢谢!~

解决方案 »

  1.   

    写触发器。
    before insert or update of xgsj on table1
    if updating

    if inserting
      

  2.   

    你弄个触发器实时的更新到table2不可以么?
      

  3.   

    因为是要远程更新,table1和table2不是同一台服务器上的表,远程的触发器担心稳定性不够
      

  4.   

    触发器好,如果不稳定可以将失败的数据写日志
    不想用触发器的话,建议table1设个标志字段,新增数据时缺省为I,修改数据时设为U,传送到table2后改成0,这样每次需要传送的数据就是标志为I的直接插入,标志为U的可以先删除table2的数据再插入
      

  5.   

    table1的表结构不可以更改的了,你说的办法挺好的,但是现在不能用
    除了触发器,直接在存储过程可以实现么???
      

  6.   

    楼主可以这样做
    1.“table1是如果有新数据就在xgsj上写入新添加时的时间”
    解决方法:
    alter table table1 
    alter column xgsj set default sysdate;2."如果是有修改则修改xgsj为修改的时间"
    解决方法:
    create or replace trigger tig_table1
      before update on table1
      for each row
    declare
      -- local variables here
    begin
      :new.xgsj:=SYSDATE;
    end tig_table1;
      

  7.   

    你这个功能自已来实现的法,我想是挺麻烦的(真正把所有的问题都考虑的话)其实用materialize view + dblink就好了,最为简单。你设置一个job,每天晚上刷新这个materialize view(物化视图)即可