Mybatis 批量插入报ORA-00933: SQL 命令未正确结束

错误出现的场景是这样的,将多个月份的1000条数据分别插入到各月份表中。

MySQL中,批量插入数据到表,会在一定程度提高效率。

insert into table (column1, column2)values(value1, value2), (value1, value2)

对于List<Map<String, Object>>类型的参数,使用mybatis实现上面语句需要用到动态SQL–foreach。

<insert id="batchInsert"">insert into ${table_name} (id, name)values <foreach collection="LIST" item="item" index="index" open="(" separator="," close=")">#{item.id, jdbcType=VARCHAR},#{item.name, jdbcType=VARCHAR}</foreach>
</insert>

上面的语句对于MySQL执行起来没有问题,但对Oracle数据库则会报如题错误:SQL命令未正确结束。

经过一系列的测试实验,找到了用Oracle虚拟表来解决这个问题,首先将数据foreach作为一张虚拟表,然后全量插入到新表中。

INSERT INTO TEMP_20200210 (DMC)SELECT CD.* FROM(SELECT 1234567 FROM DUAL UNIONSELECT 1234568 FROM DUAL UNIONSELECT 1234568 FROM DUAL) CD

上面语句,有博客中测试150万条数据182秒插入完成。本文的场景每次最多插入1000条,秒级肯定能完成,因为笔者场景是异步插入数据,对性能要求不高。

由此,改造mybatis语句如下

<insert id="batchInsert">insert into ${table_name} (id, name)SELECT A.* FROM (<foreach collection="LIST" item="item" index="index" separator="UNION ALL">select#{item.id, jdbcType=VARCHAR} id,#{item.name, jdbcType=VARCHAR} nameFROM DUAL</foreach>) A
</insert>

肯定有同学对语句中的$有疑问,有SQL注入风险。因此业务场景完全没有对外接口,可以放心使用。

我将1000条数据按照月份分成了多个Map作为插入参数,大致格式如下。

{"table_name": "user_4","LIST": [{"id": "1","name": "bee"},{"id": "2","name": "stack"}]
}

Mybatis 批量插入报ORA-00933: SQL 命令未正确结束相关推荐

  1. 解决Oracle+Mybatis批量插入报错:SQL 命令未正确结束

    Mybatis批量插入需要foreach元素.foreach元素有以下主要属性: (1)item:集合中每一个元素进行迭代时的别名. (2)index:指定一个名字,用于表示在迭代过程中,每次迭代到的 ...

  2. 数据库批量插入Insert ALL into报错ORA-00933:SQL命令未正确结束

    起因 : 批量插入数据库表报错 代码演示 : @Insert("<script> Insert ALL into table(字段1,字段2) values<foreach ...

  3. Mybatis --- ORA-00933: SQL 命令未正确结束

    使用Mybatis进行update的时候报错:  Error updating database.  Cause: java.sql.SQLSyntaxErrorException: ORA-0093 ...

  4. mysql中00933错误_java.sql.SQLException: ORA-00933: SQL 命令未正确结束错误解决

    在程序运行时,程序报sql错误"nested exception is java.sql.SQLException: ORA-00933: SQL 命令未正确结束",具体错误如下所 ...

  5. Cause: java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正确结束

    mybatis 批量插入数据到oracle报 "java.sql.SQLException: ORA-00933: SQL 命令未正确结束"  错误解决方法 <insert ...

  6. SSM:Cause: java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正确结束的解决

    QUESTION:SSM:Cause: java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正确结束的解决? ANWSER: 一:问题提出: 使用S ...

  7. ORA-00933:SQL 命令未正确结束(1)

    项目中mysql数据库换oracle数据库中报ORA-00933:SQL 命令未正确结束 问题 1.报错:ORA-00933:SQL 命令未正确结束 2.解决方法:将图1中的limit分页改成图2中的 ...

  8. ORA-00933: SQL 命令未正确结束处理办法

    问题现象:删除数据库表,oracle中出现bin$XXXXXXXXXX==$0表 ,在对其    (bin$XXXXXXXXXX==$0)删除时,报 ORA-00933: SQL 命令未正确结束 出现 ...

  9. ORA-00933: SQL命令未正确结束 解决办法

    1.报错内容 Cause: java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正确结束 ; bad SQL grammar []; nested ...

最新文章

  1. caffe apt install
  2. 【图像分割模型】全景分割是什么?
  3. 142. 环形链表 II golang
  4. Android开发:1-2、UI编程----TextView、EditView、Button、ImageView、ImageButton、CheckBox
  5. 一个apk调用另一个apk的某个activity
  6. c语言生成2048位的大素数,for语句计算输出10000以内最大素数怎么搞最简单??各位大神们...
  7. Xshell7,Xftp7免费版下载安装
  8. 《用户故事与敏捷方法》 笔记
  9. uploadify 302 php,jQuery Uploadify 上传插件出现Http Error 302 错误的解决办法
  10. 如何重装win10应用商店?
  11. Python 查找算法_众里寻他千百度,蓦然回首那人却在灯火阑珊处(线性、二分,分块、插值查找算法)
  12. 美爆!《自然》公布2018年19张最震撼的科学图片
  13. oracle dbms_utility.get_time,dbms_utility如何使用?
  14. 华硕路由器的虚拟服务器,华硕(ASUS)路由器中继设置_华硕路由器无线中继模式设置教程-192路由网...
  15. ps 制作虚线框背景
  16. 1.1需求调研(一) - 需求调研的目的
  17. 腾讯大数据Hermes爱马仕的系统
  18. 继戴姆勒之后 德国公司Bury就汽车通信相关专利授权投诉诺基亚
  19. springboot 出现A component required a bean of type ‘com.cly.dao.OthersMapper‘ that could not be found.
  20. 微软公司2007年秋季校园招聘在线宣讲会

热门文章

  1. Python-线性判别分析(Fisher判别分析)使用鸢尾花数据集 Iris
  2. 《王者荣耀》手游感想
  3. 【手游服务端】仙梦奇缘一键端服务端
  4. 【​观察】探访中国首家高端装备智能工厂 浪潮重新定义计算新未来
  5. 舒舍说:在北京租房,有什么好物强烈推荐?
  6. 深度神经网络的压缩与加速-后浪可以更精彩【VALSE Webinar】Panel实录
  7. YEF 2022昨日开幕,多网络平台全程免费直播,开启在线技术盛宴!
  8. 服务器和主机有什么区别?
  9. 质量属性的六个常见属性场景(淘宝网)
  10. 服务条款 - 语音家常菜谱