Oracle如何实现从特定组合中随机读取值

2015-07-16 12:08:37 · 作者: · 浏览: 0

在这里,我们会用到DBMS_RANDOM包和CASE WHEN语句,思路如下:


一、利用DBMS_RANDOM.RANDOM函数随机生成数值,然后对数值进行取模,如果我们要在10个元素中随机读取的话,那我们需要对10进行取模。


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


譬如,我有一个组合,里面包含“北京”,“上海”,“广州”,“深圳”,“武汉”五个元素,想从这五个元素中随机读取值来填充表的某个字段。


首先,创建测试表


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.