Oracle如何达成从一定组合中随机读取值

在此处,我们会用到DBMS_Oracle,RANDOM包和CASE WHEN语句,思路如下:

一、利用DBMS_RANDOM.RANDOM函数随机生成数值,然后对数值实行取模,假设大家要在11个成分中随机读取的话,那我们供给对10开始展览取模。

二 、再将取模后的值利用CASE WHEN语句与成分进行关联。

譬如说,我有3个构成,里面包括“Hong Kong”,“新加坡”,“布宜诺斯艾Liss”,“蒙特利尔”,“匹兹堡”多少个成分,想从那七个因素中随心所欲读取值来填充表的某些字段。

先是,创制测试表

SQL> create table test(loc varchar2(2 char));

Table created.

结构能随意读取成分的SQL语句

select case mod(abs(dbms_random.random),5)
       when 1 then '北京'
       when 2 then '上海'
       when 3 then '广州'
       when 4 then '深圳'
       else '武汉' end "LOC"
from dual;

大量填充test表的loc字段

begin
  for i in 1..10 loop
     insert into test values(case mod(abs(dbms_random.random),5)
          when 1 then '北京'
          when 2 then '上海'
          when 3 then '广州'
          when 4 then '深圳'
          else '武汉' end );
  end loop; 
end;

最终生成的结果如下:

SQL> select * from test;

LOC
--------
武汉
广州
上海
北京
上海
武汉
北京
上海
武汉
深圳

10 rows selected.

 

相关文章