1. 使用批量插入最先想到如下的插入语句

insert into a (id,name) values('','') ,('','') 但是 oracle 并不支持这种写法

然后查询得知可以使用如下写法

insert all

into a(id,name) values('','')

into a(id,name) values('','') (注:可以一次插入一个表也可以多个表)

但是这种方式有一种限制,就是 行数乘以列数不能大于1000(我没有验证),而且这种方式据说效率不高(我没有验证)

但是我做批量插入的数据时从别的接口获取的,我无法知道到底有多少数据,而且表的数据库超过50个,所以我舍弃了这种方式,pass.

继续百度,获知可以使用视图插入,没有行数限制(据说数据最大64k,待项目上线验证),而且效率较高

如下:

insert into a (id,name)

<iterate conjunction="UNION ALL"  property="d">

select #d[].id#,#d[].name# from dual

</iterate>

可以成功,happy..but

我们用的是oracle ,id 是用序列生成的,简单 ,把id 替换成序列生成就是了

于是

insert into a (id,name)

<iterate conjunction="UNION ALL"  property="d">

select SEQ_A.nextval,#d[].name# from dual

</iterate>

运行,我去,报错: 此处不允许序号,,什么???

测试下到底是什么不支持序号,打开plsql

insert into a (id,name)

select SEQ_A.nextval,null from dual

没有问题。。。

然后执行

select SEQ_A.nextval,null from dual

union all

select SEQ_A.nextval,null from dual

提示此处不允许序号,,问题找到了,原来是 union all 和 nextval 不能一块用。。。

百度下原因:

Restrictions on Sequence Values You cannot use CURRVAL and NEXTVAL in the

following constructs:
■ A subquery in a DELETE, SELECT, or UPDATE statement
■ A query of a view or of a materialized view
■ A SELECT statement with the DISTINCT operator
■ A SELECT statement with a GROUP BY clause or ORDER BY clause   
■ A SELECT statement that is combined with another SELECT statement with the
UNION, INTERSECT, or MINUS set operator
■ The WHERE clause of a SELECT statement
■ The DEFAULT value of a column in a CREATE TABLE or ALTER TABLE statement
■ The condition of a CHECK constrain

参考(连接没法放上去,因为提示内容违禁 http://www.+++ w2bc +++.com/Article/18614, 访问时把加号去掉)

应该是上面标红的那条导致的,大致意思是 用union 连接的两个select 不能使用序列

但是我们看到在单个select 是可以使用的,

select Seq_a.nextval , null from dual 是正确的 。。

dual 可以是任何表,包括视图,那我们就先把 所有select 用union all 连接后组成一个视图,

然后使用这个视图查询就可以了。。。

修改如下

insert into a (id,name)

select SEQ_A.nextval, t. * from (

<iterate conjunction="UNION ALL"  property="d">

select #d[].name# from dual

</iterate>

) t

正常运行。。。

同时注意 
SELECT id,name FROM (select SEQ_B_LOG_ID.NEXTVAL id , 'elong_deo' name from dual);

这样也是不对的,违反第二条,在被查询的视图中使用序号

可以改成

select  SEQ_B_LOG_ID.NEXTVAL id,name from (select 'elong_deo' name from dual);

3. --- The error occurred while applying a parameter map.
--- Check the doInsertFlightDynamic-InlineParameterMap.
--- Check the statement (update failed).
--- Cause: java.sql.SQLSyntaxErrorException: ORA-01745: 无效的主机/绑定变量名

sql语句中,两个填充变量间没有写逗号

ibatis 批量插入oracle总结的更多相关文章

  1. Java使用iBatis批量插入数据到Oracle数据库

    Java使用iBatis批量插入数据到Oracle数据库 因为我们的数据跨库(mysql,oracle),单独取数据的话需要遍历好多遍,所以就想着先从mysql数据库中取出来的数据然后在oracle数 ...

  2. ibatis 批量插入

      ibatis 批量插入 CreationTime--2018年7月2日10点21分 Author:Marydon 1.说明 基于oracle的sql语句 2.主键id有默认值,比如:sys_gui ...

  3. IBatis批量插入数据

    IBatis插入注意,数据量比较多的花,需要分批插入,策略是dao里面控制插入批次,mapper里面批量插入即可 @Override public Long insertBatch(List<W ...

  4. mybatis批量插入oracle时报错:unique constraint (table name) violated

    mybatis批量插入oracle时报错:unique constraint (table name) violated,是因为插入的集合中有两条相同唯一约束的数据.

  5. oracle+ibatis 批量插入-支持序列自增

    首先请先看我前面一篇帖子了解oracle批量插入的sql:[oracle 批量插入-支持序列自增] 我用的ibatis2.0,sqlMap文件引入的标签如下: <!DOCTYPE sqlMap ...

  6. mysql+ibatis 批量插入

    述:相比oracle批量插入,mysql批量插入就简单的多了,mysql支持values后面跟多条数据,进行批量插入,并且主键可以自增,不像oracle会遇到序列问题. 1.建表 CREATE TAB ...

  7. C# OracleBulkCopy 批量插入oracle数据库的方法

    只有安装了oracle 11G客户端的机器上才可以用,要用到ODP.NET组件中的oracleDataAccess.DLL,命名空间引用为Oracle.DataAccess.Client; 引用:Or ...

  8. mybatis批量插入oracle

    <insert id="batchInsert" parameterType="java.util.List"> INSERT INTO TEST( ...

  9. 批量插入Oracle,遇到CLob字段慢的解决办法

    在一次执行批量插入到Oracle表,其他一个字段设置为CLOB,但没有内容,在插入时,在代码指定为CLOB类型,插入相当慢,后来改为VarChar2,速度就上去了,经测试,插入一个65535个字符,没 ...

随机推荐

  1. closest应用(向上查找最近的资料)

    //新增网址信息function AddSitInfo(a) {    var obj = $(a).closest("td[name='POIRestaurant_Reference_UR ...

  2. rabbitMQ学习(五)

    topic匹配模式,topic能满足匹配结果就行. 发送端: public class EmitLogTopic { private static final String EXCHANGE_NAME ...

  3. javascript知识点总结----Function定义

    ---恢复内容开始--- 函数Function: 函数实际上是对象,每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法,函数名实际上是一个指向函数的指针,不会与某个函数绑定 ...

  4. 一些对数学领域及数学研究的个人看法(转载自博士论坛wcboy)

    转自:http://www.math.org.cn/forum.php?mod=viewthread&tid=14819&extra=&page=1 原作者: wcboy 现在 ...

  5. C#字符串(截取)

    1.按照逗号进行截取,并存放在一个数组中 eq:截取字符串,并放在数组中:string[] strArray = strPaths.Split(','); 获取某一个值 string s1=strAr ...

  6. 代理服务器(Proxy)原理

    17.1 什么是代理服务器(Proxy)   以类似代理人的身份去取得用户所需要的数据就是了! 但是由于它的『代理』能力,使得我们可以透过代理服务器来达成防火墙功能与用户浏览数据的分析!   此外,也 ...

  7. AngularJS 1.2.x 学习笔记(表单校验篇)

    https://my.oschina.net/cokolin/blog/526911 摘要: 本文首发于 blog.csdn.net/vipshop_ebs/article/details/39472 ...

  8. SSRS动态设置文本框属性

    SSRS可以通过表达式动态设置文本框所有的属性,比如字体,字号,是否加粗,如下图所示: 汉字和数字英文字母占用的空间不一样,一个汉字占用两个数字和英文字母的空间,VB里有LENB取得字节数,这SSRS ...

  9. UVa 694 - The Collatz Sequence

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=94&page=s ...

  10. Android开发--仿微信语音对讲录音

    原文地址:http://www.2cto.com/kf/201502/378704.html 自微信出现以来取得了很好的成绩,语音对讲的实现更加方便了人与人之间的交流.今天来实践一下微信的语音对讲的录 ...