mybatis3 oracle,Mybatis3中對oracle的批量插入

Mybatis批量插入的資料,很多都是mysql的,insert into ... values (),(),...醬紫。oracle中不支持這種語法,oracle中的批量插入是醬紫insert intoselcect... union all select ...。在這里http://my.oschina.net/u/232879/blog/118245有說明mysqlINSERT INTO T_P_ROLE_MODULE (ROLE_ID, MODULE_ID)VALUES ( #{item.roleId}, #{item.moduleId})oracleINSERT INTO T_P_ROLE_MODULE (ROLE_ID, MODULE_ID)SELECT #{item.roleId}, #{item.moduleId} FROM DUALmybatis的foreach說明如下foreach的主要用在構建in條件中,它可以在SQL語句中進行迭代一個集合。foreach元素的屬性主要有 item,index,collection,open,separator,close。item表示集合中每一個元素進行迭代時的別名,index指 定一個名字,用於表示在迭代過程中,每次迭代到的位置,open表示該語句以什么開始,separator表示在每次進行迭代之間以什么符號作為分隔 符,close表示以什么結束,在使用foreach的時候最關鍵的也是最容易出錯的就是collection屬性,該屬性是必須指定的,但是在不同情況 下,該屬性的值是不一樣的,主要有一下3種情況:如果傳入的是單參數且參數類型是一個List的時候,collection屬性值為list如果傳入的是單參數且參數類型是一個array數組的時候,collection的屬性值為array如果傳入的參數是多個的時候,我們就需要把它們封裝成一個Map了,當然單參數也可以封裝成map,實際上如果你在傳入參數的時候,在breast里面也是會把它封裝成一個Map的,map的key就是參數名,所以這個時候collection屬性值就是傳入的List或array對象在自己封裝的map里面的key測試這種方式可行,但現在想插入同時指定序列,想當然這樣改了下SELECT SEQ_XXX.NEXTVAL , #{item.roleId}, #{item.moduleId} FROM DUAL報ORA-02287: sequence number not allowed here錯誤。ORA-02287錯誤網上最多的例子就是序列不能跟group by一起使用,解決方法就是把group by語句包起來,外層再select序列就可以了。目前這個錯誤顯示不是group by的問題,也有神似大仙的人物建議使用oracle的insert all,可這個是將數據插入多張表的語句,與當前問題不屬於同一范疇。在一個wiki里看到ORA-02287錯誤的詳細描述http://www.orafaq.com/wiki/ORA-02287The following are the cases where you can't use a sequence:

For a SELECT Statement:

In a WHERE clause

In a GROUP BY or ORDER BY clause

In a DISTINCT clause

Along with a UNION or INTERSECT or MINUS

In a sub-query

Other areas:

A sub-query of Update or Delete

In a View or snapshot

In a DEFAULT or CHECK Condition of a table definition

Within a single SQL statement that uses CURRVAL or NEXTVAL, all referenced LONG columns, updated tables, and locked tables must be located on the same database.其中講到union中也不用使用序列。UNION 指令的目的是將兩個 SQL 語句的結果合並起來,可以查看你要的查詢結果. UNION在進行表鏈接后會篩選掉重復的記錄,所以在表鏈接后會對所產生的結果集進行排序運算,刪除重復的記錄再返回結果。 UNION ALL的用法和union一樣,只不過union含有distinct的功能,它會把兩張表了重復的記錄去掉,而union all不會,所以從效率上,union all 會高一點。這里就是union中不能使用序列的問題,將select序列語句再往里包一層也是不行的,union會嵌套向里層檢查。往里包不行,就往外包,寫成這樣可行select SEQ_XXX.NEXTVAL, a.* from(select 1,'66' from dual unionselect 2,'77' from dual) a於是foreach的配置變成這個樣子就可以了select #{item.code,jdbcType=VARCHAR}, #{item.name,jdbcType=VARCHAR} from dual使用mybatis將數據批量插入到oracle中,在映射文件中怎么寫啊?

1.mybaits版本,3.1.0

2.

insert into b_agent_info

(id,hkgs,userName,custName,office,remark) values

separator=",">

(#{item.id},#{item.hkgs},#{item.userName},#{item.custName},#{item.office},#{item.remark})

3

select seq_preson_id.nextval from dual

insert into preson

separator="union">

select #{id},#{item.presonName},#{item.presonTel},#{item.presonEmail},#{item.presonAge} from dual

insert into PRESON

select SEQ_PRESON_ID.NEXTVAL,A.* from(

separator="UNION">

SELECT

#{item.presonName},

#{item.presonTel},

#{item.presonEmail},

#{item.presonAge}

from dual

) A

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/550345.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python里 try里怎么用int函数_如何在不使用try / catch的情况下测试Python枚举中是否存在int值?...

测试价值变体1请注意,_member_names_具有一个名为in的成员(未记录...):print(Fruit._value2member_map_)# {4: , 5: , 6: }您可以对照此地图测试值是否在_member_names_中:5 in Fruit._value2member_map_ # True7 in Fruit._value2member_map…

U盘安装可能会遇见UEFI的问题,使用easyBCD安装即可。

参考链接 CSDN博客 Tips 关于 (hd0,0) 如果出现 File not find的问题那么使用,(hd0,1) 后面的数字变一下,主要根据是,windows 的磁盘管理中的C盘的系统盘的序列。 转载于:https://www.cnblogs.com/eat-too-much/p/11120772.html

oracle truct,java向oracle 存储过程 传输数组

1 根据传参创建一个自定义类型create or replace type user_type force as object(age number,username nvarchar2(20),phone nvarchar2(20),syntime DATE)2 创建数组create or replace type user_type_arr as table of user_type3 创建存储过程create or replace procedure pr…

python 动态调整控件大小_python PyQt5如何让窗口控件与窗口大小同步变化?

在下面的代码中 self.tableWidget.resize(self.width()-20,self.height()-20)self.tableWidget.move(10,20)这两行没有起作用?不知为何?from PyQt5 import QtCore, QtGui, QtWidgetsfrom PyQt5.QtGui import QIconfrom PyQt5.QtWidgets import *from PyQ…

oracle sum详解,oracle sum()聚合函数

原文链接:https://blog.csdn.net/cizatu5130/article/details/100291347oracle sum()聚合函数2016-05-13 20:08:00 cizatu5130 阅读数 8Oracle 的sum聚合函数的功能就是求和(这里暂时不讨论分析函数用法),一般用法不多讲,有个用法比较令人疑惑…

接口批量同步数据_千手接口平台+电商ERP,助德嵘大药房征战拼多多

拼多多对C端经营者来说,是一个处于红利期的第三方C端电商平台,进驻费比天猫低很多,而且流量成本也低,很多商家都跃跃欲试。但对于没有C端平台运营经验的商家,进驻后会发现几个"坑":客单价低、退货…

FRM二级备考感想

真的是意料之中的Fail... 只有在Current Issues考得1,其他四门都是3... 复习的很不扎实,考前头脑里没有知识架构,考场无法对综合题目进行分析,直觉又从来靠不住。 同事说,二级不要想太多,就能过。 基础班视…

oracle静默文件建库,【配置上线】Oracle静默建库 for 11g

Oracle静默建库for 11g使用静默dbca创建数据库有两种方法:1)一种是根据oracle自身的数据库模板创建数据库(建议),数据库模板位置$ORACLE_HOME/assistants/dbca/templates/*.dbcORACLE为我们提供了几个dbc模板:Data Warehouse数据仓库Transact…

word2vec python 代码实现_python gensim使用word2vec词向量处理中文语料的方法

word2vec介绍word2vec是google的一个开源工具,能够根据输入的词的集合计算出词与词之间的距离。它将term转换成向量形式,可以把对文本内容的处理简化为向量空间中的向量运算,计算出向量空间上的相似度,来表示文本语义上的相似度。…

【第55题】【062题库】2019年OCP认证062考试新题

55题、choose two Your database supports an online transaction processing (OLTP) workload in which one of the applications creates a temporary table for a session and performs transactions on it. This consumes a lot of undo tablespace and generates lots of …

oracle中 start with,Oracle中connect by...start with...的使用

大致写法:select * from some_table [where 条件1] connect by [条件2] start with [条件3];其中 connect by 与 start with 语句摆放的先后顺序不影响查询的结果,[where 条件1]可以不需要。另外一种写法:select * from some_table connect b…

【第56题】【062题库】2019年OCP认证062考试新题

56题、choose two In your database, USERS is the default permanent tablespace. Examine the commands and their outcome: SQL> CREATE USER user02 identified by us123 QUOTA 10M ON users; User created. SQL> GRANT create session, sysdba TO user02; Grant suc…

python 共享文件夹 密码_用不同的用户名和密码登录网络上的共享文件夹

网络共享时,有时不同的文件夹需要不同的用户名和密码登入,而windows已经记录了一个原来使用的用户名及密码默认使用这个用户名及密码不再弹出用户名及密码输入提示对话框.简易解决办法.如下:1、注销当前用户重新登入。(重启亦可)2、单击开始菜单,在运行对话框(快捷键…

php 接口有几种,【后端开辟】php接口有哪些范例?

接口是什么?运用接口(interface),能够指定某个类必需完成哪些要领,但不须要定义这些要领的具体内容。接口是经由过程 interface 关键字来定义的,就像定义一个规范的类一样,但个中定义一切的要领都是空的。接口中定义的…

python福利彩随机_看大神如何用Python分析福利彩票的秘密,百万大奖不是梦!

相信福利彩票大家都买过吧,既然学爬虫为何不动手写个小程序抓一下呢,说不定还能发现福彩的秘密,本篇主要面向于对Python爬虫感兴趣的零基础的同学,实例为中彩网的福利3D彩票,比较有趣,小伙伴们一起动手开始…

java是编译型语言还是解释型语言?

首先拿python和C说明,python运行速度慢,和C程序相比非常慢,因为Python是解释型语言,你的代码在执行时会一行一行地被python解释器翻译成CPU能理解的机器码,这个翻译过程非常耗时,所以很慢。而C/C程序是编译…

typedef函数指针_C语言函数指针之回调函数

1 什么是回调函数?首先什么是“回调”呢?我的理解是:把一段可执行的代码像参数传递那样传给其他代码,而这段代码会在某个时刻被调用执行,这就叫做回调。如果代码立即被执行就称为同步回调,如果过后再执行&a…

生成球 使用openMesh 库

简介 使用openmesh生成一个球&#xff0c;采用的是标准球坐标系。 // 生成球 n 最好输入偶数 10 或者 100 #include <iostream> #include <OpenMesh/Core/IO/MeshIO.hh> #include <OpenMesh/Core/Mesh/TriMesh_ArrayKernelT.hh> #include<cmath> #d…

oracle存储过程没有返回值,Java调用Oracle存储过程(无返回值)

无返回值&#xff1a;1&#xff1a;创建存储过程此存储过程向表中插入一条数据create or replace procedure demo_procedure(id varchar2,name varchar2,age varchar2,sex varchar2,address varchar2)asbegininsert into system.demo values(id,name,age,sex,address);end;2&am…

python static函数_python函数怎么实现static变量?

展开全部python函数实现static变量具体32313133353236313431303231363533e4b893e5b19e31333365633838如下&#xff1a;def ask_ok(prompt, retries4, complaintYes or no, please!):while True:ok raw_input(prompt)if ok in (y, ye, yes): return Trueif ok in (n, no, nop, …