ランダムの非常に具体的な定義があり、重複を許可できない場合、例外処理は重複を回避するのに役立ちます。
この方法は非常に遅くなります。これを複数回行う必要がある場合、または大量のデータを処理する必要がある場合は、「ランダム」の定義を緩和して、Erichのようなソリューションを使用することをお勧めします。
--Create temporary unique constraint. (Assuming you want each column to be unique?)
alter table countries add constraint countries_name_uq unique (country_name);
--Insert random data until it worked 1 million times.
Declare
rows_inserted number := 0;
Begin
Loop
Begin
INSERT INTO COUNTRIES(COUNTRY_ID, COUNTRY_NAME)
VALUES(dbms_random.string('L', 7), dbms_random.string('L', 15));
--Only increment counter when no duplicate exception
rows_inserted := rows_inserted + 1;
Exception When DUP_VAL_ON_INDEX Then Null;
End;
exit when rows_inserted = 1000000;
End loop;
commit;
End;
/
--Drop the temporary constraint
alter table countries drop constraint countries_name_uq;
--Double-check the count of distinct rows
select count(*) from
(
select distinct country_id, country_name from countries
);
Result
------
1000000