写一个procedure来做了。
建立一个临时表,存放上次处理过得ID的范围。
让后procedure读取这个表的ID范围后选出处理的记录来处理。
用dbms_job提交成oralce的job,自动执行就可以了。

解决方案 »

  1.   

    建议你在表中建立一个处理标志列,结合使用伪列rownum
    select * from yourtable where rownum<=1000 and flagcol condition
    处理完毕后更新标志列就可以了
      

  2.   

    使用rowid吧,虽然它可能不是唯一的(这样的情况很少)
      

  3.   

    rowid好像不方便参与计算。如AAAHtRAAPAAAGciAAC。我的设想是由一个变量记录人员Id号,一个变量记录行数。
    由于表的设计者并没有为这个表添加自动顺序号,我拟采用rownum虚拟行的办法,但发现使用rownum无法获得一个区间。如...where rownum < 6 and rownum > 4,或...where rownum between 4 and 6。大家有没有好的办法。
      

  4.   

    获得一个区间
    select * from yourtable where rownum<=4 minus select * from yourtable where rownum<=6;
      

  5.   

    如果这样,...where rownum < 10000 minus ...where rownum < 9500;
    这样合理吗?
    求更优的方案。
      

  6.   

    如果可以更改表结构的话,加一个序列当然可以的喽,
    否则用ROWNUM来解决吧。