我想在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万条记录。
逐行确实很慢。如果可以,请立即执行;我不能,我没有足够的内存,所以我要循环执行,但一次只能处理一百万行。方法如下:
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秒。