oracle中使用DBMS_RANDOM去產生隨機數

來源:互聯網
上載者:User

標籤:res   select   sysdate   隨機數   har   int   分布   日期   大小   

在測試過程中,經常要產生一些隨機數,為此,oracle提供了DBMS_RANDOM 
這個包去產生隨機數挺好用的。下面小結下: 

這個包有initialize()、seed()、terminate()、value()、normal()、random()、string()等幾個函數 
1)dbms_random.value 
   沒有參數,會返回一個具有38位精度的數值,範圍從0.0到1.0,但不包括1.0, 
比如: 
for i in 1..10 loop 
     dbms_output.put_line(round(dbms_random.value*100)); 
     end loop; 


  如果帶有上下限的,比如: 
dbms_random.value(1,101) 則產生的為:將會產生下限到上限之間的數字,但不包含上限 

2) dbms_random.string方法 


Delect dbms_random.string(‘P‘,4 ) from dual ; 
第一個參數含義如下 
  u‘, ‘U‘ - 返回大寫字母 
  ‘l‘, ‘L‘ - 返回小寫字母 
‘a‘, ‘A‘ - 返回大小寫混合字母 
‘x‘, ‘X‘ - 大小寫字母+數字混合 
‘p‘, ‘P‘ - 
P 表示 printable,即字串由任意可列印字元構成 
而第二個參數表示返回的字串長度。 

3) dbms_random.normal 
  NORMAL函數返回服從常態分佈的一組數。此常態分佈標準差為1,期望值為0。這個函數返回的數值中有68%是介於-1與+1之間,95%介於-2與+2之間,99%介於-3與+3之間。 

4)dbms_random.random 方法 
   random返回的是BINARY_INTEGER類型值,產生一個任意大小的隨機數 
  與dbms_random.value 的區別舉例: 
   Order By dbms_random.value; 
這條語句功能是實現記錄的隨機排序 
另外: 
dbms_random.value 和 
dbms_random.random 兩者之間有什麼區別? 
1。Order By dbms_random.value ,為結果集的每一行計算一個隨機數,dbms_random.value 是結果集的一個列(雖然這個列並不在select list 中),然後根據該列排序,得到的順序自然就是隨機的啦。 
2。看看desc資訊便知道vlue和random這兩個函數的區別了,value返回的是number類型,並且返回的值介於1和0之間,而random返回的是BINARY_INTEGER類型 

5)產生隨機日期 
   Oracle將日期作為過去某個關鍵日期(如果你好奇的話,我可以告訴你這個日期是公元前4712年1月1日)的整數位移量來儲存。這就意味著你可以通過尋找與你希望的起始日期相對應的整數,然後向它加入一個隨機的整數來隨機產生一個指定範圍內的日期。 

使用TO_CHAR函數和‘J’格式代碼,你可以為今天的日期產生一個內部日期數: 

SELECT TO_CHAR(SYSDATE, ‘J‘) FROM DUAL; 

例如,要產生一個2012年內的任意日期,你可以首先確定2012年1月1日的日期整數; 

SELECT TO_CHAR(TO_DATE(‘01/01/12‘,‘mm/dd/yy‘),‘J‘)FROM DUAL; 

系統給的結果是2455928。所以要產生該年度內的任意日期,我們就要用帶有low_value等於2455928和high_value等於2455928+365參數的DBMS_RANDOM.VALUE,再把它轉換成日期: 

SELECT TO_DATE(TRUNC(DBMS_RANDOM.VALUE(2455928,2455928+365)),‘J‘) FROM DUAL; 

6) 來個綜合的例子: 
  SELECT     LEVEL                                                       empl_id, 
           MOD (ROWNUM, 50000)                                         dept_id, 
           TRUNC (DBMS_RANDOM.VALUE (1000, 500000), 2)                 salary, 
           DECODE (ROUND (DBMS_RANDOM.VALUE (1, 2)), 1, ‘M‘, 2, ‘F‘)   gender, 
           TO_DATE (   ROUND (DBMS_RANDOM.VALUE (1, 28)) 
                    || ‘-‘ 
                    || ROUND (DBMS_RANDOM.VALUE (1, 12)) 
                    || ‘-‘ 
                    || ROUND (DBMS_RANDOM.VALUE (1900, 2010)), 
                    ‘DD-MM-YYYY‘ 
                   )                                                   dob, 
           DBMS_RANDOM.STRING (‘x‘, DBMS_RANDOM.VALUE (20, 50))        address 
      FROM DUAL 
CONNECT BY LEVEL < 10000;

oracle中使用DBMS_RANDOM去產生隨機數

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.