Oracle如何實現從特定組合中隨機讀取值


在這里,我們會用到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.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM