dbms_random是一個可以產生隨機數值或者字串的程式包。
這個包有initialize()、seed()、terminate()、value()、normal()、random()、string()等幾個函數,但value()是最常用的,下面依次介紹各個函數的詳細用法:
1.dbms_random.value方法
第一種:FUNCTION value RETURN NUMBER;
說明:
這種用法沒有參數,會返回一個具有38位精度的數值,範圍從0.0到1.0,但不包括1.0。
樣本:
BEGIN
FOR i IN 1 .. 10 LOOP
dbms_output.put_line(round(dbms_random.value * 100));
END LOOP;
END;
結果:
第二種:FUNCTION value (low IN NUMBER, high IN NUMBER) RETURN NUMBER;
說明:
value帶有兩個參數,第一個指下限,第二個指上限,將會產生下限到上限之間的數字,但不包含上限。
樣本:
BEGIN
FOR i IN 1 .. 10 LOOP
dbms_output.put_line(trunc(dbms_random.value(1,101)));
END LOOP;
END;
結果:
2. dbms_random.string 方法
FUNCTION string (opt CHAR, len NUMBER) RETURN VARCHAR2;
說明:
某些使用者管理程式可能需要為使用者建立隨機的密碼。使用10G下的dbms_random.string 可以實現這樣的功能。
參數:
opt :
■ '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-numericcharacters
■ 'p', 'P' - returning string in any printable characters.Otherwise the returning string is in uppercase alphacharacters.
len :
表示返回的字串長度。
樣本:
SELECT dbms_random.string('P',8) FROM dual;
結果:
3. dbms_random.random 方法
FUNCTIONrandomRETURN BINARY_INTEGER;
說明:
random返回的是BINARY_INTEGER類型值,產生一個任意大小的隨機數。
樣本:
SELECT dbms_random.random FROM dual;
結果:
備忘:dbms_random.value 和 dbms_random.random 兩者之間有什麼區別?
1、Order By dbms_random.value ,為結果集的每一行計算一個隨機數,dbms_random.value 是結果集的一個列(雖然這個列並不在select list 中),然後根據該列排序,得到的順序自然就是隨機的啦。
2、value返回的是number類型,並且返回的值介於1和0之間,而random返回的是BINARY_INTEGER類型(以二進位形式儲存的數字,據說運算的效率高於number但我沒測試過,但取值範圍肯定小於number,具體限制得查資料了)
4. dbms_random.normal方法
FUNCTIONnormal RETURN NUMBER;
說明:
NORMAL函數返回服從常態分佈的一組數。此常態分佈標準差為1,期望值為0。這個函數返回的數值中有68%是介於-1與+1之間,95%介於-2與+2之間,99%介於-3與+3之間。
樣本:
BEGIN
FOR i IN 1 .. 10 LOOP
dbms_output.put_line(round(dbms_random.normal));
END LOOP;
END;
結果:
5. dbms_random.seed方法
PROCEDURE seed(val IN BINARY_INTEGER);或PROCEDURE seed(val IN VARCHAR2);
說明:
用於產生一個隨機數種子,設定種子的目的是可以��複產生隨機數,用於調試。否則每次不同,難以調度。
樣本:
結果(不管執行多少次都不變):