`
lzg406
  • 浏览: 60311 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

db2与ibatis部分更新bug

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

采用分批次更新。
<update id="messageDonetime" >
    UPDATE
      (
select * from  TMP_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 &lt;= #dealNum#
)
SET DONETIME=OUTTIME
但是又带来新的问题,处理速度太慢,估计是最里面的select语句的原因

最后还是用fetch  first,不再从外面传值
<update id="messageDonetime" >
    UPDATE
      (
select * from  TMP_MESSAGE t where t.DONETIME IS NULL
          fetch first 5000 rows only
       )
    SET DONETIME=OUTTIME
</update>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics