Oracle使用虚拟表dual一次插入多条记录
从一个CSV文件中读取所有的数据,并且插入到一个Oracle数据库中,并且几分钟内完成,大约有60万条。
网上有人说了,你可以循环insert然后插入几千条以后Commit一次,我靠,你自己试试看!!如果没试过就不要误导别人好吧。
还有人说了,Oracle根本不支持一次多条插入,我靠,你咋不说自己学艺不精呢?
现在给大家介绍一个小技巧,话说在Oracle里有一个很奇特的“表”,名叫Dual。我们就要利用这个Dual来做文章,
首先,你知道 select '1' from dual 是啥结果吗? 对了,结果就是返回1。
其次,你知道
select '1' from dual
union all
select '2' from dual
是啥结果吗? 对鸟,结果是
1
2
那么,最关键的地方来了,
insert into 表名 (字段1)
select '1' from dual
union all
select '2' from dual
那么这一次就插入了两条数据。当然,如果全字段插入 那个(字段1)还可以省略掉。
下面一个具体例子:
insert into doc_data (code,id,value,state)
select '13','川A','成都市公安局交通警察支队车辆管理所',0 from dual
union all select '13','川B','绵阳市公安局交通警察支队车辆管理所',0 from dual
union all select '13','川C','自贡市公安局交通警察支队车辆管理所',0 from dual
union all select '13','川D','攀枝花市公安局交通警察支队车辆管理所',0 from dual
最后的实践证明,如果循环60万次Insert,一个小时也执行不完(当然有可能是机器太烂),而拼成1000条Select再插入一次,插入60万条的时间是20分钟,而拼成5000条Select再Insert一次,插入60万条数据的时间是12分钟。
祝你好运。
转载:http://www.cnblogs.com/huangzhen/archive/2011/12/04/2275429.html
处理虚表插入多条是用序列进行插入报错的问题
第一种方法
create or replace function get_seq (p_in_sqname in varchar2) return number
is
l_res number ;
begin
execute immediate 'select '|| p_in_sqname|| '.nextval from dual' into l_res ;
return l_res ;
end ; insert into t_fms_dictionary(id,dic_key,dic_lang,DIC_UPDATABLE,DIC_VALUE)
select get_seq('seq_dictionary_id'), '1','1' ,'1' ,'1' from dual
union all
select get_seq('seq_dictionary_id') , '2','2','2','2' from dual
union all
select get_seq('seq_dictionary_id') , '3','3','3','3' from dual 第二种方法:
insert into t_fms_dictionary(id,dic_key,dic_lang,DIC_UPDATABLE,DIC_VALUE)
select get_seq('seq_dictionary_id'),A.* from (
select '1','1' ,'1' ,'1' from dual
union all
select '2','2','2','2' from dual
union all
select '3','3','3','3' from dual) A
最新文章
- CSS 外边距合并
- JDK错误
- QQl聊天消息
- Mousetrap - Keyboard shortcuts in Javascript
- php分页笔记
- JAVA之File类创建对象构造函数传参数需要注意的几点
- Graphics.DrawString 方法
- CSS3制作
- Android media媒体库分析之:MediaProvider
- 使用 PHPStorm + Xdebug 实现断点调试(二)
- WebGL开发入门
- Codeforces 869C The Intriguing Obsession
- H5+Ajax+WebApi实现文件下载(进度条,多文件)
- log4cxx用环境变量设置输出文件名
- [多线程] 生产者消费者模型的BOOST实现
- UNIX环境高级编程——system V消息队列
- pwnable.tw hacknote
- iphone投屏电脑 苹果x用无线充电好不好
- python函数之协程与面向过程编程
- 【Linux 线程】线程同步《三》
热门文章
- c# 关于10进制和16进制转换以及显示
- MAC上的包管理利器
- VS2013提示error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead.
- CSS两端对齐
- 项目在JDK1.8环境下的一个Bug
- Docker 基础 : 网络配置
- (二)Python是一门什么样的语言?
- postgresql----serial类型和序列
- 一步步优化JVM六:优化吞吐量
- [kuangbin带你飞]专题六 最小生成树 POJ 2421 Constructing Roads