【DB筆試面試494】Oracle中哪個包用於生成隨機值?

  • 2019 年 10 月 11 日
  • 筆記

題目部分

在Oracle中,Oracle中哪個包用於生成隨機值?

答案部分

DBMS_RANDOM是一個可以生成隨機數值或者隨機字符串的程序包。這個包有INITIALIZE()、SEED()、TERMINATE()、VALUE()、NORMAL()、RANDOM()、STRING()等幾個函數,它們提供了內置的隨機數生成器,可以用於快速生成隨機數,下面只介紹VALUE()和STRING()函數,其它函數的使用方法參考官方文檔。

1、DBMS_RANDOM.VALUE方法

VALUE()是最常用的方法,它的用法一般有兩種:第一種用法沒有參數,會返回一個具有38位精度的數值,範圍從0.0到1.0,但不包括1.0。以下示例返回10個[0,100)內的任意整數:

SQL> SET SERVEROUT ON  SQL> BEGIN     2    FOR I IN 1..10 LOOP     3      DBMS_OUTPUT.PUT_LINE(ROUND(DBMS_RANDOM.VALUE*100));     4    END LOOP;     5  END;     6  /  46  19  45  37  33  57  61  20  82  8    PL/SQL 過程已成功完成。

第二種VALUE帶有兩個參數,第一個指下限,第二個指上限,將會生成下限到上限之間的數字,但不包含上限,示例如下所示:

SQL> BEGIN     2    FOR I IN 1..10 LOOP     3      DBMS_OUTPUT.PUT_LINE(TRUNC(DBMS_RANDOM.VALUE(1,101)));     4    END LOOP;     5  END;     6  /  97  77  13  86  68  16  55  36  54  46  PL/SQL 過程已成功完成。

2、DBMS_RANDOM.STRING方法

DBMS_RANDOM.STRING可以用來生成隨機字符串,如下所示:

SELECT ROUND(DBMS_RANDOM.VALUE(0, 10)) COL_0,         DBMS_RANDOM.STRING('a', ROUND(DBMS_RANDOM.VALUE(0, 10))) COL_A, --all返回不分大小寫的字母字符串         DBMS_RANDOM.STRING('u', ROUND(DBMS_RANDOM.VALUE(0, 10))) COL_U, --upper返回大寫字母字符串         DBMS_RANDOM.STRING('l', ROUND(DBMS_RANDOM.VALUE(0, 10))) COL_L, --little小寫字母         DBMS_RANDOM.STRING('x', ROUND(DBMS_RANDOM.VALUE(0, 10))) COL_X, --大寫字母加數字         DBMS_RANDOM.STRING('p', ROUND(DBMS_RANDOM.VALUE(0, 10))) COL_P --所有可以打印的字符    FROM DUAL;

除此之外,還有DBMS_RANDOM.RANDOM返回的值介於2的31次方和-2的31次方之間的整數值,還有其它一些不常用的函數,這裡就不介紹了。

本文選自《Oracle程序員面試筆試寶典》,作者:李華榮。