精华内容
下载资源
问答
  • oracle ODP.NET 批量插入或更新
  • 考虑到当Excel数据量较大时,循环Insert语句效率太低,故采用批量插入的方法。在插入操作运行时,会造成系统短暂的“卡死”现象。为了让用户知道插入的状态,需要制作一个进度条来显示插入的进度。 批量插入 项目中...
  • oracle批量生成数据脚本,oracle批量生成数据脚本,oracle批量生成数据脚本,oracle批量生成数据脚本。
  • 第一种: begin insert into tableName(column1, column2, column3...) values(value1,value2,value3...); insert into tableName(column1, column2, column3...) values(value1,value2,value3...);...
  • Oracle实现批量插入更新

    千次阅读 2019-07-04 21:41:30
    https://www.jb51.net/article/132823.htm https://crukor.iteye.com/blog/2215573 https://www.jb51.net/article/132823.htm https://blog.csdn.net/lwpczy1/article/details/79158535
    展开全文
  • 主要介绍了Oracle中多表关联批量插入,批量更新与批量删除操作,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
  • oracle 批量插入数据存储过程。亲测好用。支持 plsql ,toad,等数据库分析软件。主要包括变量的定义,循环及游标的使用等, 亲测好用
  • 今天小编就为大家分享一篇关于Mapper批量插入Oracle数据@InsertProvider注解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
  • 今天小编就为大家分享一篇关于ibatis结合oracle批量插入三种方法的测评,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
  • 在并发量比较高的时候,可能两个线程都查询某个记录不存在,所以会执行两次插入,然后其中一条必然会因为主键(这里说的主键不是递增主键)冲突而失败。 数据库层MySQL中INSERT … ON DUPLICATE KEY UPDATE … 就...

    INSERT … ON DUPLICATE KEY UPDATE … 语句

    在并发量比较高的时候,可能两个线程都查询某个记录不存在,所以会执行两次插入,然后其中一条必然会因为主键(这里说的主键不是递增主键)冲突而失败。

    数据库层MySQL中INSERT … ON DUPLICATE KEY UPDATE … 就可以做这个事情,并且是原子性操作。

    1、单条记录下使用:

    INSERT INTO t1 (a,b,c) VALUES (1,2,3) 
        ON DUPLICATE KEY UPDATE c=c+1;

    如上sql假如t1表的主键或者UNIQUE 索引是a,那么当执行上面sql时候,如果数据库里面已经存在a=1的记录则更新这条记录的c字段的值为原来值+1,然后返回值为2。如果不存在则插入a=1,b=2,c=3到数据库,然后返回值为1。

    2、多条记录下使用:

    INSERT INTO t1 (a,b,c) VALUES (1,2,3),(4,5,6) 
        ON DUPLICATE KEY UPDATE c=VALUES(c);

    MERGE INTO...语句

     T有a、b两个字段 a是主键。现在有记录(100, 2)要保存到T中,T中如果已经存在则更新字段b,没有插入。

    MERGE INTO T T1
    USING (SELECT '100' AS a, 2 AS b FROM dual) T2
    ON ( T1.a = T2.a)
    WHEN MATCHED THEN
      UPDATE SET T1.b = T2.b
    WHEN NOT MATCHED THEN 
      INSERT (a, b) VALUES(T2.a, T2.b);
    

    MyBatis下使用

    Mybatis作为经典的数据库持久层框架,自然要介绍下它下的使用

    • 在mapper.xml里面配置如下:
      假设a为主键
    <insert id="insertOrUpdate">
            INSERT INTO t1 (a,b,c) 
            values
            <foreach collection="list" item="item"  separator=",">
                (#{item.a},#{item.b},#{item.c})
            </foreach>
            ON DUPLICATE KEY UPDATE c=values(c),b=values(b)
     </insert>
    
    • 对应的mapper接口可以定义为:
    long insertOrUpdate(List<Test> list);
    
    class Test{
    private int a;
    private int b;
    private int c;
    ...
    }

    展开全文
  • 本文通过实例代码给大家分享了MyBatis批量插入数据到Oracle数据库中的两种方式,非常不错,具有参考借鉴价值,需要的朋友参考下吧
  • 网上许多Mybatis向数据库批量插入、批量更新的基本都是向mysql插入、更新的,而当使用相同的方法向Oracle数据库插入、更新时,总是会出现问题报错。 mybatis映射中可以通过标签来实现Oracle批量插入更新和删除 ...

    网上许多Mybatis向数据库批量插入、批量更新的基本都是向mysql插入、更新的,而当使用相同的方法向Oracle数据库插入、更新时,总是会出现问题报错。

    mybatis映射中可以通过标签来实现Oracle的批量插入、更新和删除
    标签中主要有以下属性:
    collection、item、index、open、separate、close
    collection:该属性必须指定,指代Dao层接口传递的数据类型,主要有三种:
    ①:list集合类型;collection=”list“
    ②:array数组类型;collection=”array“
    ③:map映射类型;collection=”map“
    item:别名,表示集合中每一个元素迭代时的别名,获取数据时必须指定用别名来指定,不然会报错。
    index:迭代下标,即迭代过程中的位置。
    open:表示语句以什么开始。
    separate:表示每次迭代之间以什么符号作为分割。
    close:表示语句以什么结束。

    网上向mysql批量插入是下面这样操作的
    <insert id="batchInsert" parameterType="java.util.List">
        insert into USER (id, name) values
        <foreach collection="list" item="model" index="index" separator=","> 
            (#{model.id}, 
             #{model.name})
        </foreach>
    </insert>
    
    
    

    但由于oracle语法这样写是有问题的,
    网上找了MyBatis 之foreach插入的相关资
    具体如下:

        foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。
    
        foreach元素的属性主要有 item,index,collection,open,separator,close。
    
        item表示集合中每一个元素进行迭代时的别名,index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔符,close表示以什么结束,在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况 下,该属性的值是不一样的,主要有一下3种情况:
    
        1.如果传入的是单参数且参数类型是一个List的时候,collection属性值为list
    
        2.如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array
    
        3.如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map
    

    于是乎就有了上边不动脑,错误的写法了!!

    又查了MyBatis操作Oracle的相关资料

    得到结论:在Oracle的版本中,有几点需要注意的:

        1.SQL中没有VALUES;
    
        2.<foreach>标签中的(selece ..... from dual);
    
        3.<foreach>标签中的separator的属性为"UNION ALL",将查询合并结果集。
    
    所以向oracle中批量插入插入应该这样写
    <insert id="insertExpenseItem" parameterType="List">
            insert into expenseItem(itemId,expId,type,amount,itemDesc)
                select seq_item.nextval itemId,A.*
            from(
                <foreach collection="list" item="item" separator="union all" >
                    select
                        #{item.expId} expId,
                        #{item.type} type,
                        #{item.amount} amount,
                        #{item.itemDesc} itemDesc
                    from dual
                </foreach>
            )A
    </insert>
    

    其中seq_item.nextval是表的序列,itemId是主键。
    示例如下:
    在这里插入图片描述

    网上批量更新不再赘述,向oracle中批量更新应该这样写
     <update id="upRroleTable" useGeneratedKeys="false" parameterType="java.util.HashMap">
          begin
            <foreach collection="list" item="info" index="list" separator=";">
                update ${tableName}
                <set>
                    VAL_CD=#{info.VAL_CD},
                    VAL_NM=#{info.VAL_NM},
                    VAL=#{info.VAL},
                    VAL_ID=#{info.VAL_ID},
                    ruleset=#{info.ruleset}
                </set>
                where VAL_ID =#{info.VAL_ID}
            </foreach>
            ;end;
        </update>
    

    注意要加begin和;end;

    参考文章:MyBatis操作Oracle批量插入 ORA-00933: SQL 命令未正确结束
    Mybatis(Oracle)批量插入、批量更新、批量删除
    useGeneratedKeys的详解
    Mybatis执行sql(insert、update、delete)返回值问题

    展开全文
  • 模拟批量数据插入Oracle数据库
  • Mybatis中实现oracle批量插入更新

    千次阅读 2014-12-26 21:39:22
    oracle 实现在Mybatis中批量插入,下面测试可以使用,在批量插入中不能使用insert 标签,只能使用select标签进行批量插入,否则会提示错误 ### Cause: java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正确...

            oracle 实现在Mybatis中批量插入,下面测试可以使用,在批量插入中不能使用insert 标签,只能使用select标签进行批量插入,否则会提示错误

    ### Cause: java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正确结束
    ; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正确结束

    • 批量插入方式一

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper 
    	PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
    	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.attence.attence.dao.AttenceDao">
    	<resultMap id="Attence" type="Attence">
    		<id column="ATTENCEKEY" 	property="attenceKey"/>
    		<result column="EPC" 		property="epc"/>
    		<result column="ANT" 		property="ant"/>
    		<result column="RSSI" 		property="rssi"/>
    		<result column="DEVICE" 	property="device"/>
    		<result column="CRC" 		property="crc"/>
    		<result column="BCC" 		property="bcc"/>
    		<result column="DATETIME" 	property="dateTime" />
    	</resultMap>		
    	
    	<select id="insertAttence" parameterType="List">
    		INSERT ALL	
            <foreach collection="list" item="attence" index="index" separator="">  
    		into Attence(
    			attenceKey,
    			epc,
    			ant,
    			rssi,
    			device,
    			crc,
    			bcc,
    			dateTime
    		)
    		values
            (
            	#{attence.id},
            	#{attence.epc},
            	#{attence.ant},
            	#{attence.rssi},
            	#{attence.device},
            	#{attence.crc},
            	#{attence.bcc},
            	#{attence.dateTime}        	
            ) 
            </foreach>  		
            SELECT * 
            FROM dual
    	</select>	
    </mapper>
    

          以上方式不支持oracle的主键序列方式。

    •  批量插入方式二

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper 
    	PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
    	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.attence.attence.dao.AttenceDao">
    	<resultMap id="Attence" type="Attence">
    		<id column="ATTENCEKEY" 	property="attenceKey"/>
    		<result column="EPC" 		property="epc"/>
    		<result column="ANT" 		property="ant"/>
    		<result column="RSSI" 		property="rssi"/>
    		<result column="DEVICE" 	property="device"/>
    		<result column="CRC" 		property="crc"/>
    		<result column="BCC" 		property="bcc"/>
    		<result column="DATETIME" 	property="dateTime" />
    	</resultMap>		
    	
    	<insert id="insertAttence" parameterType="java.util.List">
    		insert into Attence(
    			attenceKey,
    			epc,
    			ant,
    			rssi,
    			device,
    			crc,
    			bcc,
    			dateTime
    		)
                    Select  
                         SEQ_ATTENCE.NEXTVAL,a.*
                    From (
                         <foreach collection="list" item="attence" index="index" separator="union all"> 
                         ( 
                              Select 
                                    #{attence.epc}, 
                                        #{attence.ant}, 
                                        #{attence.rssi}, 
                                        #{attence.device}, 
                                        #{attence.crc}, 
                                        #{attence.bcc}, 
                                        #{attence.dateTime} 
                                        From dual 
                                ) 
    
                          </foreach>
                    )
           </insert>
           </mapper>
    
     
    

             同时由于使用oracle的自增加序列,无法联合union all使用,会提示错误,必须加上select语句进行进一步封装。

             1、传入的参数只有一个list时,则Mybatis映射collection的键名list,若传入含有其他参数,需要使用HashMap,同时键名为HashMap对应的键名。

             2、传入的参数只有一个array时,则Mybatis映射collection的键名array,若传入含有其他参数,需要使用HashMap,同时键名为HashMap对应的键名。

    • 传递包含有数组参数的多参数HashMap实现批量插入

    	<select id="insertGuideVideoList" parameterType="HashMap">
     	    insert into Guide_Video(	
    				id,
    				guideId,
    				videoId
    		) 	    
    		Select
    			SEQ_Guide_Video.NEXTVAL ,#{guideId}, video.*
    		From( 	
     	    <foreach collection="arrGuideVideo" item="videoId" index="index" separator="union all">    
    			Select
    				#{videoId} videoId
    			From dual 
    		</foreach>
    		)video
    	</select>	

            arrGuideVideo是一个字符串数组,这里必须使用select标签,而不能使用insert标签。如果使用insert标签执行会提示语句未结束。


    • 实现批量更新

    	<update id="updateTest" parameterType="Test">
    	    Begin
    	         Update TST_TEST
    			<set> 
    	            <if test="test.testName != null and test.testName!= ''">
    	                TESTNAME 	= #{test.testName}, 
    	            </if>
    	            
    	            <if test="test.gatherKey != null and test.gatherKey!= ''">
    	                GATHERKEY 	= #{test.gatherKey}, 
    	            </if>	   
    	            
    	            <if test="test.subjectKey != null and test.subjectKey!= ''">
    	                SUBJECTKEY 	= #{test.subjectKey}, 
    	            </if>	 	  
    	            
    	            <if test="test.gradeKey != null and test.gradeKey!= ''">
    	                GRADEKEY 	= #{test.gradeKey}, 
    	            </if>	 
    	            
    	            <if test="test.answerCount != null and test.answerCount!= ''">
    	                answerCount 	= #{test.answerCount}, 
    	            </if>	   
    	            
    	            <if test="test.answerEndTime != null and test.answerEndTime!= ''">
    	                answerEndTime 	= #{test.answerEndTime}, 
    	            </if>	
    	            
    	            <if test="test.answerTimeLength != null and test.answerTimeLength!= ''">
    	                answerTimeLength 	= #{test.answerTimeLength}, 
    	            </if>				
    			</set>
    			Where testKey = #{testKey}
    		End;
    	</update>	
           实现批量更新实际上就是 生成oracle语句的代码块,然后jdbc执行sql语句。


    展开全文
  • 本文给大家介绍Oracle+Mybatis的foreach insert批量插入报错的快速解决办法,非常不错,具有参考借鉴价值,感兴趣的朋友参考下吧
  • 主要介绍了c#几种数据库的大数据批量插入(SqlServer、Oracle、SQLite和MySql),需要的朋友可以了解一下。
  • Java实现使用Mybatis将数据批量插入Oracle数据库,并且可以使用Oracle序列来生成主键
  • oracle数据据库中批量插入数据的java方法
  • oracle 批量插入语句

    千次阅读 2019-07-14 10:46:37
    最近项目中使用oracle,现在要将一个包含对象的list集合批量插入到数据库中,由于项目使用的是mybaits,所以便想着用foreach功能进行批量插入。但是oracle与mysql的批量插入有很大的不同,首先oracle不支持主键自增...
  • 问题:用mybaits 批量插入数据到Oracle 数据库的时候, 报错: ORA-00933: SQL 命令未正确结束 / ORA-00933: SQL command not properly ended ; 意思就是 语法错误  原因: oracle 批量插入与mysql 的批量...
  • 1. 关于oracle 批量更新或插入数据库写法:UPDATE orderWarehouseSET shippingCompanyid = #{orderWarehousePo.shippingCompanyId},CUSTOMERSHIPPINGACC = #{orderWarehousePo.customerShippingAcc},...
  • 高效批量插入更新

    2017-03-24 12:30:21
    C#批量插入更新ORACLE 保存100万条数据大概3-5秒 保存或者更新100万条数据大概20秒 DataTable保存100万条数据大概1-2分钟 可能因环境原因时间有差异,不过可以看出性能还是很大提升的
  • 第一种:begininsert into tableName(column1, column2, column3...) values(value1,value2,value3...);insert into tableName(column1, column2, column3...) values(value1,value2,value3...);...
  • 利用MyBatis动态SQL的特性,我们可以做一些批量的操作,下面这篇文章主要给大家介绍了关于Oracle + Mybatis实现批量插入更新和删除的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来...
  • 数据库做数据库开发管理的人经常要创建大量的测试数据,动不动就需要上万条,如果一条一条的录入,那会浪费大量的时间,本文介绍了Oracle中如何通过一条 SQL快速生成大量的测试数据的方法。 产生测试数据的SQL如下...
  • ORACLE 批量插入(Insert)详解

    千次阅读 2020-11-26 22:22:56
    Oracle批量插入语句与其他数据库不同,下面列出不同业务需求的插入 假设有一张表Student -- 学生表 create table Student( id Varchar2(11) primary key, name varchar2(32) not null, sex varchar2(3) not null,...
  • Oracle批量插入数据

    万次阅读 2018-04-25 09:56:29
    一条SQL语句批量插入数据到数据库:(1)INSERT INTO 某表 VALUES(各个值),VALUES(各个值),.....;(2)多个INSERT INTO VALUEES(各个值);以“;”隔开一同执行以上两种方法Oracle和SQL Server都不支持,MySQL支持 ...
  • oracle批量插入 值过多 报错

    千次阅读 2019-05-12 20:42:35
    Cause: java.sql.SQLSyntaxErrorException: ORA-00913: 值过多 ; bad SQL grammar []; nested exception is java.sql....错误信息如上,正常情况而言,这个错误是因为 值个数比插入的列个数多导致的 如果数据库...
  • 一直使用的是Oracle数据库,现在换成mysql数据库,数据库不同批量插入的语法也不同 mysql批量插入的语法: <insert id="addBatch" parameterType="java.util.List" useGeneratedKeys="false"> INSERT ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 34,684
精华内容 13,873
关键字:

oracle批量插入或更新