向oracle中批量更新报错 Cause: java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正确结束


报错sql如下:

<update id="updateBatch">
        <foreach collection="list" item="item" index="index" separator=";">
            update ICS_TASK_DETAILS
            set EXE_PEOPLE_ID = #{item.exePeopleId},
                STATUS = #{item.status},
                EXE_TIME = #{item.exeTime}
            where
                CAL_TASK_ID = #{item.calTaskId}
                and  TASK_ID = #{item.taskId}
        </foreach>
</update>

修改后sql如下,注意新增begin和;end;

<update id="updateBatch">
        begin
        <foreach collection="list" item="item" index="index" separator=";">
            update ICS_TASK_DETAILS
            <set>
                EXE_PEOPLE_ID = #{item.exePeopleId},
                STATUS = #{item.status},
                EXE_TIME = #{item.exeTime}
            </set>
            where CAL_TASK_ID = #{item.calTaskId}
            and  TASK_ID = #{item.taskId}
        </foreach>
        ;end;
</update>

批量更新时,foreach对传入的数据迭代更新操作,foreach中主要存在collection、item、index、open、separate、close几个参数:

  collection为指定,指代Dao层接口传递的数据类型,分别是list、数组array和map。

  item:别名,表示集合中每一个元素迭代时的别名,获取数据时必须指定用别名来指定,如例子中所示,迭代循环时,使用item来获取属性值。

  index:迭代下标,即迭代过程中的位置。

  open:表示语句以什么开始。

  separate:表示每次迭代之间以什么符号作为分割。

  close:表示语句以什么结束。

 欢迎批评指正。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM