Oracle 逐条和批量插入数据方式对比

原创 2012年03月27日 22:41:16

创建测试表

create table base_users

(

  userid         varchar2(16),

  username  varchar2(32),  

  passwd      varchar2(16)

)tablespace cat_data;


采用一条一条插入的方式

create or replace procedure insert_data_one_by_one(n in number)

as

    currentId number(16) := 0;

    l_userid varchar2(16);

    l_username varchar2(32);

    sqltext varchar2(256);

begin
    dbms_output.put_line('begin ...' || to_char(current_timestamp, 'HH24:MI:SSxFF'));

    sqltext := 'insert into base_users(userid, username, passwd) values(:userid, :username,' || '111111 )';

    loop
        currentId:=currentId + 1;
        l_userid:= to_char(currentId);
        l_username:= to_char(18600000000 + currentId);

        execute immediate sqltext using l_userid, l_username;
        exit when currentId >= n;
    end loop;
    commit;
    dbms_output.put_line('end commit ...' || to_char(current_timestamp, 'HH24:MI:SSxFF'));
end insert_data_one_by_one;
/


采用批量插入的方式

create or replace procedure insert_data_bulk(n in number)

as

  i int;

  tmp_userid         number;

  tmp_username  number;

  type useridArray is table of varchar2(16) index by binary_integer;

  type usernameArray is table of varchar2(32) index by binary_integer;

  puserid useridArray;

  pusername usernameArray;

begin

  dbms_output.put_line('begin ...' || to_char(current_timestamp, 'HH24:MI:SSxFF'));

  tmp_userid := 1;

  tmp_username := 18600000000;

  for i in 1 .. n loop

    puserid(i) := tmp_userid;

    pusername(i) := tmp_username;

    tmp_userid := tmp_userid + 1;

    tmp_username := tmp_username + 1;

  end loop;

  forall i in 1 ..n

    insert into base_users(userid, username, passwd)

                 values(puserid(i), pusername(i), '111111');

  commit;

  dbms_output.put_line('end ...' || to_char(current_timestamp, 'HH24:MI:SSxFF'));

endinsert_data_bulk;

/


测试1千万条数据的插入

SQL>set serveroutput on

SQL>begin

insert_data_one_by_one(10000000);

end;

/

begin ...22:14:01.572928000
end commit ...22:20:43.911104000


SQL>truncate table base_users;


SQL>begin

insert_data_bulk(10000000);

end;

/

begin ...22:25:31.497810000
end ...22:27:23.801515000

Oracle 逐条和批量插入数据方式对比

创建测试表 create table base_users (   userid         varchar2(16),   username  varchar2(32),...
  • chuang123
  • chuang123
  • 2016年08月05日 10:20
  • 3622

Oracle批量逐条数据处理

----批量逐条数据处理模版----- create or replace procedure proc_test is    batch_size constant pls_integer :=...
  • iamyangzt
  • iamyangzt
  • 2017年05月09日 17:00
  • 225

批量更新与逐条更新分块提交的一次实例:修改客户信息表700万条中50万条记录

批量修改tacustomer表(5万-几十万不等),耗时几个小时,导致tacustomer锁表时间过长,引起ccentric,网站无法登录。由于该表上有3个触发器,11个索引,更新效率很低,同时该表是...
  • luocm
  • luocm
  • 2008年04月28日 13:59
  • 1942

sql逐条更新表数据

逐条更新表内符合要求的数据而不需要全部过一次表内数据
  • shudong1988
  • shudong1988
  • 2017年06月16日 16:53
  • 484

Oracle 与 Mysql 多表连接对比

oracle:   select a.aid aid , b.bid bid ,c.cid cid , d.did did , e.eid eid   from   tablea a ,   tabl...
  • jimoxiaolang
  • jimoxiaolang
  • 2016年09月07日 15:31
  • 163

mysql对比oracle

功能上 mysql相对于oracle的简化版本,很多功能比oracle弱的多,ORACLE里的高级动作丢mysql都不存在 优势 mysql最主要的优势在于开源免费和集群带来的好处(扩展性易...
  • hanbowu
  • hanbowu
  • 2016年01月22日 16:15
  • 348

Oracle 存储过程之批量添加数据

–vc_trade_id 复制交易方案id –vc_new_trade_id 新id –vc_scheme_date 系统逻辑时间 –l_trade_stage 交易方案轮次 –vc_tr...
  • zhumuqxie
  • zhumuqxie
  • 2017年02月28日 15:25
  • 145

MySQL和Oracle的区别比较

(1) 自动增长的数据类型处理 MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值。ORACLE没有自动增长的数据类型,需要建立一个自动增长的序列号,插入...
  • weixin_38070406
  • weixin_38070406
  • 2017年10月13日 01:12
  • 541

oracle sql自动递增

一、删除列ALTER TABLE AA DROP COLUMN  DEP;适用于小表-----数据量小的时候;2、ALTER TABLE AA SET UNUSED("DEP") CASCADE CO...
  • cjx44
  • cjx44
  • 2009年10月15日 15:48
  • 448

【JAVA】oracle批量插入数据操作

最近做的项目需要将大批量数据插入到数据库中,之前有印象用preparedstatement.executeBatch();来做,这样可以减少与数据库间的交互;今天上网查找了具体怎么实现,发现不仅仅只是...
  • yuanzexi
  • yuanzexi
  • 2016年03月17日 12:23
  • 4146
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Oracle 逐条和批量插入数据方式对比
举报原因:
原因补充:

(最多只允许输入30个字)