mybatis批量插入数据报错?

image.png
这是为什么呢?难道不能只插入一个字段的数据?

阅读 1.6k
2 个回答

应该这样使用

<foreach collection="list" item="item" separator="," open="(" close=")" >
    #{item.db}
</foreach>

foreach 标签的本质是循环拼接,你之前用法拼接就会成为 (db),(db) 这样的结果。

更新

下次请在问题中写清楚需求,一句 mybatis,一张图,虽然信息都在图里,但是重点信息被忽略。

Teradata 不支持这样使用。

应当改成多请求语句(MSR)

改法一,直接生成多条 insert 语句:

    <insert id="insertTest" parameterType="list">
        <foreach collection="list" item="item" separator=";">
            insert into pd_test.cfg_sync_exclude_databases (db) values (#{item.db})
        </foreach>
    </insert>

改法二,一条 insert 语句,value 通过 union all 连接(未经验证,根据详见中回答的评论,会出现语法错误):

    <insert id="insertTest" parameterType="list">
        INSERT INTO pd_test.cfg_sync_exclude_databases(db)
        WITH dual as (SELECT 1 as x)
        <foreach collection="list" item="item" separator="UNION ALL">
            SELECT #{item.db} as db FROM dual
        </foreach>
    </insert>

上面写法未经测试,可能有些小问题,但是思路是正确的。

详见

有可能是teradata数据库不支持这种批量插入的写法吧,insert table values (),(),()

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题