1、批量保存

* MySQL
批量插入的两种方式:

其一,循环插入,与MySQL无区别。
insert into table(id,name) values(1,'A’); insert into table(id,name)
values(2,’B’);
其二,批量插入
insert into table(id,name) values(1,’A’),(2,'B')
* Oracle
批量插入的两种方式:

其一,循环插入,与MySQL无区别。
insert into table(id,name) values(1,'A’); insert into table(id,name)
values(2,’B’);
其二,批量插入(无values 关键字)
insert into table(id,name) select * from ( select 1,'A' from dual union all
select 2,'B' from dual )
注意:

批量插入注意定义别名,否则可能会提示不能明确定义的列
insert into table(id,name) <foreach collection="list" item="i"
separator="union all" open="select * from (" close=")">     select #{i.id}
id,#{i.name} name from dual </foreach>

 

2、ifnull( a, b ) 变成了 nvl( a, b )

mysql的ifnull与之对应的 oracle 相应的函数 nvl。

具体的用法同 ifnull 差别不大写法:
select nvl( column, '代替字段或者值' ) 
3、限定返回结果集的行数

在mysql中,可以通过limit限制返回结果集的行数,如:
select * from u_table limit 2;

返回了u_table的前两行,在oracle中没有limit,如果oracle要得到同样的结果,则:
select * from u_table where rownum < 3;
这里rownum是内置关键字,表示结果集的行号,但是不能对rownum进行复合条件判断,如果要返回第11行至第20行10条数据:
#错误写法: select * from u_table where rownum > 10 and rownum < 21;
#而是应该写成结果集相减的形式: select * from u_table where rownum < 21 minus select * from
u_tablewhere rownum < 11;
4、union all不能与order by一起同级用

union all和order by一起使用时,会报错,可以使用临时表的方式解决该问题。
#不同排序字段 select * from (查询1) union all select * from (查询2) 或 #相同排序字段 select *
from(查询1 union all 查询2) order by xx;

发现一个,记录一个!未完待续。。。

技术
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:766591547
关注微信