Mybatis 批量插入报ORA-00933: SQL 命令未正确结束
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 命令未正确结束相关推荐
- 解决Oracle+Mybatis批量插入报错:SQL 命令未正确结束
Mybatis批量插入需要foreach元素.foreach元素有以下主要属性: (1)item:集合中每一个元素进行迭代时的别名. (2)index:指定一个名字,用于表示在迭代过程中,每次迭代到的 ...
- 数据库批量插入Insert ALL into报错ORA-00933:SQL命令未正确结束
起因 : 批量插入数据库表报错 代码演示 : @Insert("<script> Insert ALL into table(字段1,字段2) values<foreach ...
- Mybatis --- ORA-00933: SQL 命令未正确结束
使用Mybatis进行update的时候报错: Error updating database. Cause: java.sql.SQLSyntaxErrorException: ORA-0093 ...
- mysql中00933错误_java.sql.SQLException: ORA-00933: SQL 命令未正确结束错误解决
在程序运行时,程序报sql错误"nested exception is java.sql.SQLException: ORA-00933: SQL 命令未正确结束",具体错误如下所 ...
- Cause: java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正确结束
mybatis 批量插入数据到oracle报 "java.sql.SQLException: ORA-00933: SQL 命令未正确结束" 错误解决方法 <insert ...
- SSM:Cause: java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正确结束的解决
QUESTION:SSM:Cause: java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正确结束的解决? ANWSER: 一:问题提出: 使用S ...
- ORA-00933:SQL 命令未正确结束(1)
项目中mysql数据库换oracle数据库中报ORA-00933:SQL 命令未正确结束 问题 1.报错:ORA-00933:SQL 命令未正确结束 2.解决方法:将图1中的limit分页改成图2中的 ...
- ORA-00933: SQL 命令未正确结束处理办法
问题现象:删除数据库表,oracle中出现bin$XXXXXXXXXX==$0表 ,在对其 (bin$XXXXXXXXXX==$0)删除时,报 ORA-00933: SQL 命令未正确结束 出现 ...
- ORA-00933: SQL命令未正确结束 解决办法
1.报错内容 Cause: java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正确结束 ; bad SQL grammar []; nested ...
最新文章
- caffe apt install
- 【图像分割模型】全景分割是什么?
- 142. 环形链表 II golang
- Android开发:1-2、UI编程----TextView、EditView、Button、ImageView、ImageButton、CheckBox
- 一个apk调用另一个apk的某个activity
- c语言生成2048位的大素数,for语句计算输出10000以内最大素数怎么搞最简单??各位大神们...
- Xshell7,Xftp7免费版下载安装
- 《用户故事与敏捷方法》 笔记
- uploadify 302 php,jQuery Uploadify 上传插件出现Http Error 302 错误的解决办法
- 如何重装win10应用商店?
- Python 查找算法_众里寻他千百度,蓦然回首那人却在灯火阑珊处(线性、二分,分块、插值查找算法)
- 美爆!《自然》公布2018年19张最震撼的科学图片
- oracle dbms_utility.get_time,dbms_utility如何使用?
- 华硕路由器的虚拟服务器,华硕(ASUS)路由器中继设置_华硕路由器无线中继模式设置教程-192路由网...
- ps 制作虚线框背景
- 1.1需求调研(一) - 需求调研的目的
- 腾讯大数据Hermes爱马仕的系统
- 继戴姆勒之后 德国公司Bury就汽车通信相关专利授权投诉诺基亚
- springboot 出现A component required a bean of type ‘com.cly.dao.OthersMapper‘ that could not be found.
- 微软公司2007年秋季校园招聘在线宣讲会