使用Oracle的存储过程批量插入数据
2015-04-13 17:36
567 查看
原文地址:http://www.cnblogs.com/liaoyu/p/oracle-procedure-batch-insert.html
作者:L君还在说之乎者也
最近在工作中,需要使用生成一些测试数据用来测试项目性能,我一开始是通过使用python生成SQL再执行,但性能不理想,今天想试试使用oracle的存储过程来实现下,效果还不错。
需要生成的SQL
存储过程实现
测试发现生成一千万条数据用了14分钟左右,性能还是可以了,如果先去掉TMP_NUM_STATUS_ID的外键估计更快。
网友 雷厉*风行 指出下面的方式速度更快,我测试插入一百万条记录十秒左右,当然了,这跟机器性能也有关系。
生成的sql文件达638M, 耗时31秒,有木有感觉使用python很方便呢。
注:使用的python版本为3.4
作者:L君还在说之乎者也
最近在工作中,需要使用生成一些测试数据用来测试项目性能,我一开始是通过使用python生成SQL再执行,但性能不理想,今天想试试使用oracle的存储过程来实现下,效果还不错。
实现相关
表结构desc TMP_UPSTATE_CASEKEY Name Null Type ------------------- -------- ---------- TMP_UPSTATE_CASEKEY NOT NULL CHAR(14) TMP_NUM_STATUS_ID NOT NULL NUMBER(38) UPDATED_DATE NOT NULL DATE
需要生成的SQL
insert into TMP_UPSTATE_CASEKEY values('TMP0000001', 1, sysdate);
存储过程实现
create or replace procedure proc_casekey_upstate as casekey char(14); begin for i in 1..10000000 loop casekey := 'TMP'||lpad(i,7,0); -- TMP0000001 insert into TMP_UPSTATE_CASEKEY values(casekey, 1, sysdate); end loop; commit; end; begin proc_casekey_upstate(); end;
测试发现生成一千万条数据用了14分钟左右,性能还是可以了,如果先去掉TMP_NUM_STATUS_ID的外键估计更快。
网友 雷厉*风行 指出下面的方式速度更快,我测试插入一百万条记录十秒左右,当然了,这跟机器性能也有关系。
insert into TMP_UPSTATE_CASEKEY select 'TMP'||LPAD(rownum,7,0),1,sysdate from dual connect by level <= 1000000;
使用python生成SQL文件
下面贴出使用python3生成SQL的代码from datetime import datetime start = datetime.now(); with open('d:/casekey_upstate.sql', 'w') as f: for x in range(1, 10000000): print("insert into tmp_upstate_casekey values('TMP%07i', 1, sysdate);" %x, file=f); end = datetime.now(); print(end-start);
生成的sql文件达638M, 耗时31秒,有木有感觉使用python很方便呢。
注:使用的python版本为3.4
相关文章推荐
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- 存储过程学习-批量插入10000条数据进数据库
- 创建测试表,批量插入数据的存储过程,分页存储过程
- 存储过程批量插入随机数据
- 如何在JAVA程序中使用Struct一次传入多条数据给Oracle的存储过程。
- Oracle利用存储过程批量insert造数据和分批提交删除的例子
- Oracle中通过存储过程,Function,触发器实现解析时间类型的字段并插入的对应的数据表中
- Oracle存储过程中使用游标来批量解析CLOB字段里面的xml字符串:
- 批量插入数据的存储过程
- mysql利用存储过程批量插入数据
- oracle 采用游标循环插入数据的存储过程
- 传参数无返回值的 java 调oracle的存储过程.(向数据库表中插入数据)
- MySql 存储过程使用游标循环插入数据示例
- .net 使用oracle 的存储过程有返回值也有数据集
- [导入]批量插入数据的存储过程
- 存储过程学习-批量插入10000条数据进数据库
- oracle 存储过程插入数据不成功
- 用存储过程加UpdateDaset方法批量插入Dataset数据
- 批量插入数据存储过程备忘
- [导入]批量插入数据的存储过程