存放隨機數的表結構:
create table coupon_code
(id number(22),--主鍵
code varchar2(10),--隨機數
used varchar2(2)--是否使用標識
)需求說明:生成1億條隨機數存放到code欄位,欄位id為主鍵,取值從1到1億,要求code值為從1到1億之間的隨機數,且不能重複,code欄位型別為字元,長度都固定為8位,不足的在左邊補0.
實現思路:每次插入一條資料,id值和code值相同,同時計數器加1,再從已經插入的資料中取出乙個隨機id,查出這個id對應的code值,將最新插入的記錄的code值與隨機取得的記錄的code值互換。
測試結果:生成1w條隨機數用時159s
儲存過程**:
create or replace procedure insert_random_couponcode(maxnum in number) is
currentid number(9);
randomid number(9);
randomcode varchar2(9);
currentcode varchar2(9);
querysql varchar2(2000);
updatesql varchar2(2000);
type c_mycur is ref cursor;
c_cur c_mycur;
begin
select max(id) into currentid from coupon_code;
if(currentid is null)then
insert into coupon_code(id,code)values(1,'00000001');
commit;
currentid:=1;
end if;
open c_cur for 'select t.id,t.code from coupon_code t';
loop
currentid:=currentid+1;
currentcode:=trim(to_char(currentid,'09999999'));
querysql:='select abs(mod(dbms_random.random,'||currentid||')) from dual';
execute immediate querysql into randomid;
if randomid=0 then
randomid:=1;
end if;
querysql:='select t.code from coupon_code t where t.id='||randomid;
execute immediate querysql into randomcode;
updatesql:='begin insert into coupon_code(id,code)values('||currentid||','''||randomcode||''')'||
';update coupon_code set code='''||currentcode||''' where id='||randomid||';end;';
execute immediate updatesql;
commit;
exit when currentid=maxnum;
end loop;
close c_cur;
dbms_output.put_line('finished !');
exception
when others then
rollback;
dbms_output.put_line('exception!!!');
end insert_random_couponcode;
oracle索引 快速生成大量測試資料
1.建立索引 create index on tablespace 2.刪除索引 drop index3.重置索引 alter index rebuild4.索引特點第一,通過建立唯一性索引,可以保證資料庫表中每一行資料的唯一性。第二,可以大大加快資料的檢索速度,這也是建立索引的最主要的原因。第三,...
oracle儲存過程刪除大量資料
create or replace procedure delbigtab p tablename in varchar2,p condition in varchar2,p count in varchar2 as pragma autonomous transaction n delete nu...
Oracle 資料庫SQL語句生成大量測試資料。
做資料庫開發或管理的人經常要建立大量的測試資料,動不動就需要上萬條,如果一條一條的錄入,那會浪費大量的時間,本文介紹了oracle中如何通過一條sql快速生成大量的測試資料的方法。產生測試資料的sql如下 sql select rownum as id,2 to char sysdate rownu...