Oracle+Mybatis的foreach insert批量插入报错的快速解决办法

MyBatis的foreach功能在oracle数据库进行批量插入,报错如下:
Cause: java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正确结束
<insert id="addUser" parameterType="java.util.List">
<selectKey keyProperty="cityId" order="BEFORE" resultType="String">
<![CDATA[SELECT SEQ_S_USER.NEXTVAL FROM dual]]>
</selectKey>
INSERT INTO s_user(ID,NAME, PASSWORD) VALUES 
<foreach collection="list" item="item" open="(" separator=","close=")">
#{item.name,jdbcType=VARCHAR} name,
#{item.password,jdbcType=VARCHAR} password
</foreach>
</insert>
打印出来的结果是:INSERT INTO s_user vaules (id,name, password) VALUES (?,?,?),(?,?,?)在oracle数据库不支持这样的插入语句。但是在mysql里面可以。所以在oracle里面正确的写法是:

<insert id="addUser" parameterType="java.util.List">
INSERT INTO s_user(ID,NAME, PASSWORD)
SELECT SEQ_S_USER.NEXTVAL ID, A.*FROM(
<foreach collection="list" item="item" index="index" separator="UNION ALL">
SELECT #{item.name,jdbcType=VARCHAR} name,
#{item.password,jdbcType=VARCHAR} password FROM dual
</foreach> )A
</insert>
注意:在oracle数据库里面批量插入,小编不建议使用以上的方法。可以使用JDBCTemplate批量插入,具体方法就不在这里讲了。




  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值