解决方案 »

  1.   

    create or replace procedure test is
    begin
      delete from view_log;
      insert into view_log
        select * from A WHERE FLAG = 'N';
      UPDATE TABLE A SET FLAG = 'Y';
      COMMIT;
    EXCEPTION
      WHEN OTHERS THEN
        DBMS_OUTPUT.put_line('Error Happened!!');
      
    end test;--通过job调用存储过程定时执行
    declare
      job1 number;
    begin
      sys.dbms_job.submit(job       => :job1,
                          what      => 'test;',
                          next_date => sysdate,
                          interval  => 'trunc(sysdate)+1'); --每天凌晨执行
      commit;
    end;
    /
      

  2.   

    create or replace procedure test is
    begin
      delete from view_log;
      insert into view_log
        select * from A WHERE FLAG = 'N';
      UPDATE TABLE A SET FLAG = 'Y';
      COMMIT;
    EXCEPTION
      WHEN OTHERS THEN
        DBMS_OUTPUT.put_line('Error Happened!!');
      
    end test;--通过job调用存储过程定时执行
    declare
      job1 number;
    begin
      sys.dbms_job.submit(job       => :job1,
                          what      => 'test;',
                          next_date => sysdate,
                          interval  => 'trunc(sysdate)+1'); --每天凌晨执行
      commit;
    end;
    /
    UPDATE TABLE A SET FLAG = 'Y';
    忙中出错吧,把table去掉
    UPDATE A SET FLAG = 'Y';
      

  3.   

    代码都完工了,楼上几位写的不错。
    有个建议:  insert into view_log   select * from A WHERE FLAG = 'N';
      UPDATE TABLE A SET FLAG = 'Y';以上两句,改成如下,原因1.减小 undo 和 redo 。 原因2.以防中间有新数据写入 A 表,造成 view_log 数据不完整 
    insert into view_log    select * from A WHERE FLAG = 'N';
      UPDATE TABLE A SET FLAG = 'Y' where ID in (select ID from view_log    )
      

  4.   


    4楼说的可行,防止中间新写入数据,导致数据不一致create or replace procedure test 
    is
    begin 
     delete from view_log;
     insert into view_log    
    select * from A WHERE FLAG = 'N'; 
     UPDATE  A SET FLAG = 'Y' where ID in (select ID from view_log    );  
    COMMIT;
    EXCEPTION  WHEN OTHERS THEN   
     DBMS_OUTPUT.put_line('Error Happened!!');   
    end test;
    执行时做个计划任务就行了,定时每天执行