1.dbms_random.value方法

dbms_random是一個(gè)可以生成隨機(jī)數(shù)值或者字符串的程序包。這個(gè)包有initialize()、seed()、terminate()、value()、normal()、random()、string()等幾個(gè)函數(shù),但value()是最常用的,value()的用法一般有兩個(gè)種,第一 
function value return number; 
這種用法沒(méi)有參數(shù),會(huì)返回一個(gè)具有38位精度的數(shù)值,范圍從0.0到1.0,但不包括1.0,如下示例: 
SQL> set serverout on 
SQL> begin 
      for i in 1..10 loop 
        dbms_output.put_line(round(dbms_random.value*100)); 
      end loop; 
    end; 
    
46 
19 
45 
37 
33 
57 
61 
20 
82 

  
PL/SQL 過(guò)程已成功完成。 
  
SQL>  
  
第二種value帶有兩個(gè)參數(shù),第一個(gè)指下限,第二個(gè)指上限,將會(huì)生成下限到上限之間的數(shù)字,但不包含上限,“學(xué)無(wú)止境”兄說(shuō)的就是第二種,如下: 
SQL> begin 
      for i in 1..10 loop 
        dbms_output.put_line(trunc(dbms_random.value(1,101))); 
      end loop; 
    end; 
    
97 
77 
13 
86 
68 
16 
55 
36 
54 
46 
  
PL/SQL 過(guò)程已成功完成。 

 

2. dbms_random.string 方法

某些用戶管理程序可能需要為用戶創(chuàng)建隨機(jī)的密碼。使用10G下的dbms_random.string 可以實(shí)現(xiàn)這樣的功能。

例如:
SQL> select dbms_random.string('P',8 ) from dual ;
 
DBMS_RANDOM.STRING('P',8)
--------------------------------------------------------------------------------
3q<M"yf[
 
第一個(gè)參數(shù)的含義:
■ 'u', 'U' - returning string in uppercase alpha characters
■ 'l', 'L' - returning string in lowercase alpha characters
■ 'a', 'A' - returning string in mixed case alpha characters
■ 'x', 'X' - returning string in uppercase alpha-numeric
characters
■ 'p', 'P' - returning string in any printable characters.
Otherwise the returning string is in uppercase alpha
characters.
P 表示 printable,即字符串由任意可打印字符構(gòu)成
而第二個(gè)參數(shù)表示返回的字符串長(zhǎng)度。
3. dbms_random.random 方法
    random返回的是BINARY_INTEGER類型值,產(chǎn)生一個(gè)任意大小的隨機(jī)數(shù)
 dbms_random.value 的區(qū)別舉例:
   Order By dbms_random.value;
這條語(yǔ)句功能是實(shí)現(xiàn)記錄的隨機(jī)排序
另外:
dbms_random.value 和
dbms_random.random 兩者之間有什么區(qū)別?
1。Order By dbms_random.value ,為結(jié)果集的每一行計(jì)算一個(gè)隨機(jī)數(shù),dbms_random.value 是結(jié)果集的一個(gè)列(雖然這個(gè)列并不在select list 中),然后根據(jù)該列排序,得到的順序自然就是隨機(jī)的啦。
2。看看desc信息便知道vlue和random這兩個(gè)函數(shù)的區(qū)別了,value返回的是number類型,tb并且返回的值介于1和0之間,而random返回的是BINARY_INTEGER類型(以二進(jìn)制形式存儲(chǔ)的數(shù)字,據(jù)說(shuō)運(yùn)算的效率高于number但我沒(méi)測(cè)試過(guò),但取值范圍肯定小于number,具體限制得查資料了)
如果你要實(shí)現(xiàn)隨機(jī)排序,還是用value函數(shù)吧

 

4. dbms_random.normal方法

NORMAL函數(shù)返回服從正態(tài)分布的一組數(shù)。此正態(tài)分布標(biāo)準(zhǔn)偏差為1,期望值為0。這個(gè)函數(shù)返回的數(shù)值中有68%是介于-1與+1之間,95%介于-2與+2之間,99%介于-3與+3之間。

5. dbms_random.send方法  

用于生成一個(gè)隨機(jī)數(shù)種子,設(shè)置種子的目的是可以重復(fù)生成隨機(jī)數(shù),用于調(diào)試。否則每次不同,難以調(diào)度。



借助別人的力量,我將走得更遠(yuǎn)。

tb