在oracle中插入milion记录的最佳和最快方法

问题描述 投票:0回答:1

我想在oracle表中插入500万个唯一的随机数。每个随机数都有8位数字。这是我的代码

DECLARE I INT;
J INT;
gen_coupen varchar2(8);
check_coupen varchar2(8);

 BEGIN

 j :=1;

FOR I IN J..:TO_COUPEN LOOP
select round(dbms_random.value(10000000,99999999),0) into :gen_coupen from dual;

    select count(*) into :check_coupen from registration where coupen=:gen_coupen;
    if (:check_coupen=0) and LENGTH(:gen_coupen)=8 then
  insert into registration (coupen)
    values(:gen_coupen);
    commit;
end if;

此代码可以正常工作,但是要花很多时间才能插入500万条记录。

oracle oracle11g oracle10g oracle-sqldeveloper oracle-apex
1个回答
0
投票

逐行确实很慢。如果可以,请立即执行;我不能,我没有足够的内存,所以我要循环执行,但一次只能处理一百万行。方法如下:

SQL> create table registration (coupen number);

Table created.

SQL> set timing on
SQL> begin
  2    for i in 1 .. 5 loop
  3      insert into registration (coupen)
  4      select round(dbms_random.value(10000000,99999999),0) coupen
  5      from dual
  6      connect by level <= 1000000;
  7    end loop;
  8  end;
  9  /

PL/SQL procedure successfully completed.

Elapsed: 00:00:17.96
SQL> set timing off
SQL> select count(*) From registration;

  COUNT(*)
----------
   5000000

SQL>

在我的笔记本电脑和11g XE数据库上花费〜18秒。

© www.soinside.com 2019 - 2024. All rights reserved.