ibatis中批量操作在mysql和oracle的区别

本来没打算提的,之前碰到过一次,解决了就没管了,结果这次是前面别人写的代码我看了好半天才反应过来是sql写法问题。

大家都知道mysql中批量insert操作是用多个括号用逗号隔开来实现的,如:

insert into tablename(a, b, c) values (#a#, #b#, #c#),(#a#, #b#, #c#),(#a#, #b#, #c#)

这样子的形式在oracle是不行的,直接会报错你的sql没有结束。

而mysql操作在ibatis中是这样写的,如下:

<insert id="insertXXX" parameterClass="java.util.List">
		insert into tablename
		(a,b,c)
		values
		<iterate conjunction="," >
		(#codes[].a#,#codes[].b#,#codes[].c#)
		</iterate>
	</insert>

oracle中是怎么样写的呢。

oracle中的方法是类似于表复制的办法:

insert into tablename(a, b, c) select #a#,#b#,#c# from dual

这是单句的形式,为什么不直接说批量的?因为单句知道了,批量是一样的,只是用union 将多条要insert的记录联合起来即可。

insert into tablename(a, b, c) 
	select code[].#a#,code[].#b#,code[].#c# from dual 
	union 
	select code[].#a#,code[].#b#,code[].#c# from dual
	union 
	select code[].#a#,code[].#b#,code[].#c# from dual

最后,ibatis中批量insert到oracle的用法,如下:

<insert id="insertXXX" parameterClass="java.util.List">
		insert into W_DEPOT
		(a, b, c)
		<iterate conjunction="UNION" >
		SELECT #codes[].a#,#codes[].b#,#codes[].a# FROM DUAL
		</iterate>
	</insert>


OK,搞定了,童鞋们不要再出错了哦。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值