lzg406 发表于 2013-1-25 21:38:49

db2与ibatis部分更新bug

数据量太大,一次性更新处理,会有日志文件太小(事务日志)、临时表空间不够用等问题。

采用分批次更新。
<update id="messageDonetime" >
    UPDATE
      (
select * fromTMP_MESSAGE t where t.DONETIME IS NULL
          fetch first #value# rows only
       )
    SET DONETIME=OUTTIME
</update>
但是ibatis不能够将fetch first #value# rows only解析对,具体原因不知道,望赐教。



后改用类似oracle的rownum处理
UPDATE
(
   select * from
(
select t.*, ROW_NUMBER() OVER() as ROW_NUM
          from TMP_MESSAGE t where t.DONETIME IS NULL
         ) as w
   where w.ROW_NUM <= #dealNum#
)
SET DONETIME=OUTTIME
但是又带来新的问题,处理速度太慢,估计是最里面的select语句的原因

最后还是用fetchfirst,不再从外面传值
<update id="messageDonetime" >
    UPDATE
      (
select * fromTMP_MESSAGE t where t.DONETIME IS NULL
          fetch first 5000 rows only
       )
    SET DONETIME=OUTTIME
</update>
页: [1]
查看完整版本: db2与ibatis部分更新bug