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

相关文章推荐

SQLServer中批量插入数据方式的性能对比

SQLServer中批量插入数据方式的性能对比  转自:fwj380891124博客  昨天下午快下班的时候,无意中听到公司两位同事在探讨批量向数据库插入数据的性能优化问题,顿时来了兴趣,把自己的...
  • anyqu
  • anyqu
  • 2012年06月28日 20:34
  • 1746

C# 批量插入数据方式

  • 2013年01月28日 14:58
  • 32KB
  • 下载

SQLServer中批量插入数据方式的性能对比

昨天下午快下班的时候,无意中听到公司两位同事在探讨批量向数据库插入数据的性能优化问题,顿时来了兴趣,把自己的想法向两位同事说了一下,于是有了本文。 公司技术背景:数据库访问类(xxx.DataB...

Oracle使用Mybatis实现List批量插入数据

项目中会遇到这样的情况,查询出多条记录(一个List对象集合),一次性要插入多条数据到数据库中,下面就拿Data类来看看两种插入方法: 方法一:   Mybatis本身只支持逐条插入,...

MyBatis批量处理Oracle数据库数据

MyBatis批量处理Oracle数据。通过java代码分批处理,提高效率。
  • freelk
  • freelk
  • 2017年03月30日 18:19
  • 186

Oracle使用Mybatis实现List批量插入数据

项目中会遇到这样的情况,一次性要插入多条数据到数据库中,下面就拿Data类来看看两种插入方法:   方法一:   Mybatis本身只支持逐条插入,比较笨的方法,就是遍历一个List,循环中逐条...

Mybatis+Oracle进行数据的批量插入和更新

Mybatis是web工程开发中非常常用的数据持久化的框架,通过该框架,我们非常容易的进行数据库的增删改查。数据库连接进行事务提交的时候,需要耗费的资源比较多,如果需要插入更新的数据比较多,而且每次事...
  • w_y_t_
  • w_y_t_
  • 2016年05月15日 11:04
  • 5852

关于oracle批量插入数据问题

本人做项目遇到了一个很操蛋的问题,是关于数据插入的,找了很多资料,也问了很多人,但是解决方法还是不是很给力,所以自己又想了想,自认为想出来个给力的方法,所以写出来,希望大家碰到相同的问题的时候有办法能...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Oracle 逐条和批量插入数据方式对比
举报原因:
原因补充:

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