首页 > 数据库 >Mybatis 批量插入报ORA-00933: SQL 命令未正确结束

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

时间:2023-09-23 09:34:09浏览次数:52  
标签:VARCHAR name jdbcType 00933 DUAL SQL Mybatis id SELECT

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 UNION
        SELECT 1234568 FROM DUAL UNION
        SELECT 1234568 FROM DUAL
    ) CD

由此,改造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} name
	  FROM DUAL
	</foreach>
	) A
</insert>

 

标签:VARCHAR,name,jdbcType,00933,DUAL,SQL,Mybatis,id,SELECT
From: https://www.cnblogs.com/xfeiyun/p/16622998.html

相关文章

  • MySQL 出现 String Index out of range: x 的原因
    前言调试代码时遇到一个很奇怪的问题,对于一个很简单的sql,执行时会时不时的报异常StringIndexoutofrange:xSQL:select*fromtestwherearea=10但直接把SQL丢SQL工具里跑又没什么问题,百度了一圈都没找到有人有相同问题,明白后特地做下记录.原因由于要......
  • Mysql简单的学习记录(上)
    MySql一、DDL(操作数据库、数据表)创建数据库createdatabase数据库名称查询数据库showdatabasescreatedatabaseifnotexists数据库名称删除数据库dropdatabase数据库名称dropdatabaseifexists数据库名称使用数据库selectdatabase......
  • Mysql简单的学习记录(下)
    一、约束概念作用于列上的规则,用于限制加入表的数据保证数据库正确性、有效性、完整性约束的分类约束名称描述关键字非空保证列中所有数据不为nullnotnull唯一保证列中所有数据不相同unique主键主键是一行数据唯一标识,非空且唯一primarykey......
  • 中小型 MySQL,如何判断是否需要读写分离?
    在中小型MySQL数据库中是否需要实施读写分离取决于多个因素,包括数据库的负载、性能需求、可用性要求和预算等。以下是一些判断是否需要读写分离的考虑因素:负载均衡:如果您的数据库服务器经常处于高负载状态,主要是因为读和写操作同时进行,那么考虑使用读写分离来分担负载是有意义的。......
  • DBeaver中使用MySQL在建表时使用DROP TABLE IF EXISTS `tbl_book`;报错
    点击查看代码DROPTABLEIFEXISTS`tbl_book`;CREATETABLE`tbl_book`(`id`int(11)NOTNULLAUTO_INCREMENT,`type`varchar(20)DEFAULTNULL,`name`varchar(50)DEFAULTNULL,`description`varchar(255)DEFAULTNULL,PRIMARYKEY(`id`))ENGINE=Inn......
  • PostgreSQL集群解决方案与流复制项目实战
    一、风哥PG-DBA培训15:PostgreSQL集群解决方案与流复制项目实战课程目标:本课程由风哥发布的基于PostgreSQL数据库的系列课程,本课程属于PostgreSQL主从复制与高可用集群阶段之PostgreSQL集群解决方案与流复制项目实战,学完本课程可以掌握PostgreSQL集群与高可用架构解决方案,Postgre......
  • PostgreSQL负载均衡分发与双主HA架构
    一、风哥PG-DBA培训16:PostgreSQL负载均衡分发与双主HA架构本课程由风哥发布的基于PostgreSQL数据库的系列课程,本课程属于PostgreSQL主从复制与高可用集群阶段之PostgreSQL负载均衡分发与双主HA架构,学完本课程可以掌握PostgreSQL高可用负载均衡解决方案,PostgreSQL+Keepalived流复......
  • PostgreSQL高可用集群项目实战之Repmgr
    一、风哥PG-DBA培训18:PostgreSQL高可用集群项目实战之Repmgr课程目标:本课程由风哥发布的基于PostgreSQL数据库的系列课程,本课程属于PostgreSQL主从复制与高可用集群阶段之PostgreSQL高可用集群项目实战之Repmgr,学完本课程可以掌握Repmgr运行架构与基础知识,PostgreSQL+Repmgr实战......
  • PostgreSQL逻辑复制技术与项目实战
    一、风哥PG-DBA培训20:PostgreSQL逻辑复制技术与项目实战本课程由风哥发布的基于PostgreSQL数据库的系列课程,本课程属于PostgreSQL主从复制与高可用集群阶段之PostgreSQL逻辑复制技术与项目实战,学完本课程可以掌握PostgreSQL逻辑复制基础与架构,PostgreSQL逻辑复制配置之内置默认,Po......
  • PostgreSQL高可用集群项目实战之Patroni
    一、风哥PG-DBA培训19:PostgreSQL高可用集群项目实战之Patroni课程目标:本课程由风哥发布的基于PostgreSQL数据库的系列课程,本课程属于PostgreSQL主从复制与高可用集群阶段之PostgreSQL高可用集群项目实战之Patroni,学完本课程可以掌握Patroni运行架构与基础知识,PostgreSQL+Patroni......