Oracle使用虚拟表dual一次插入多条记录
2016-12-30 16:45
639 查看
从一个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
处理虚表插入多条是用序列进行插入报错的问题
网上有人说了,你可以循环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
相关文章推荐
- linux 下oracle自动启动
- ORACLE存过中%TYPE和%ROWTYPE的说明与使用方法
- 由oracle mysql数据库表自动生成表单,增删改查。
- Oracle视图时间戳转为Date
- python连接oracle数据库.so文件未找到的解决办法
- Oracle小函数大用处!
- oracle 查看执行最慢 sql
- linux6.6 安装 oracle10g 问题集锦
- Python使用TuShare将股票数据保存到Oracle数据
- oracle的安装与plsql的环境配置
- oracle的number数据类型
- Oracle与jdbc增删改查CRUD(Create-Read-Update-Delete)
- Oracle数据库一些操作
- ora11g 安装报错ins_emagent.mk
- oracle中创建表时添加注释
- Oracle数据库导入导出命令总结
- 解决Tomcat下连接Oracle报错"Error while registering Oracle JDBC Diagnosability MBean."
- oracle 用库内分片的方法来 优化sql
- Oracle时间戳(毫秒)转为Date
- ORACLE-ASM