是这样,我要在一个库对我开放的一张视图里取数据,用dblink,十秒轮询一次,然后没有的就insert,已经有的就update,怎么样写这个存储过程呢??!

解决方案 »

  1.   

    使用merge 没有insert 存在update呀
      

  2.   

    写个存储过程,里面采用merge into 来合并数据。
    create or replace procedure my_sync
    as
    begin
      merge into  a
    using (select id,name from b ) c
    on(a.id=c.id )
    when matched then update set a.name=c.name
    when not matched then insert (a.id,a.name) values (c.id,c.name);
    end;
    /
    再用个job,间隔10秒来调用这个存储过程。
    VARIABLE jobno number;
    begin
    DBMS_JOB.SUBMIT(:jobno,
     'my_sync;',
    SYSDATE,'SYSDATE + 10/60/60/24'); --10秒
    commit;
    end;
    /如果过程执行时间很长,那就相应要调大间隔时间。
      

  3.   

    不好意思啊,具体没说清楚。我从表a取数据b,其中每次只取a的新产生的id号,所以还需要有新id的判断,旧的就不用取了。程序里还得包括异常抛出和输出错误日志的功能啊~~~~~求助!!