Oracle随机函数

DBMS_RANDOM包提供了内置的随机数生成器。

大多数语言的随机函数生成器都需要提供一个种子,在Oracle中,选取种子的过程叫做初始化,再执行随机函数之前,可以不用显式地执行初始化,Oracle会自动使用日期、用户ID、进程ID来进行初始化。当然,也可以显式地初始化或者叫自定义初始化。

INITIALIZE过程


  • 作用

    自定义选择初始化种子,初始化DBMS_RANDOM包中的随机函数生成器

  • 语法:

DBMS_RANDOM.INITIALIZE (
   val  IN  BINARY_INTEGER);

val参数表示种子数字

  • 示例:
SQL> exec dbms_random.initialize(1);

PL/SQL procedure successfully completed.

SEED过程


  • 作用

    和INITIALIZE过程作用一样,只是添加了字符串作为初始化种子的支持。

  • 语法

DBMS_RANDOM.SEED (
   val  IN  BINARY_INTEGER);

DBMS_RANDOM.SEED (
   val  IN  VARCHAR2);
  • 示例
SQL> exec dbms_random.seed(1828);

PL/SQL procedure successfully completed.

SQL> exec dbms_random.seed('ASDFadre');

PL/SQL procedure successfully completed.

字符串长度最多可以为2000.

RANDOM函数


  • 作用:

    生成[ -231,231 ]范围内的随机整数

  • 语法:

DBMS_RANDOM.RANDOM
   RETURN binary_integer;
  • 示例:
SQL> select dbms_random.random from dual;

    RANDOM
----------
-239250746

RANDOM函数的返回值取值范围是[ -231,231 ],因此如果我们若想得到[-1,1]范围内的伪随机结果:

SQL> select dbms_random.random/power(2,32) from dual;

DBMS_RANDOM.RANDOM/POWER(2,32)
------------------------------
            .013329373

如果是[0,1],取绝对值即可

SQL> select abs(dbms_random.random/power(2,32)) from dual;

ABS(DBMS_RANDOM.RANDOM/POWER(2,32))
-----------------------------------
             .061013688

若想[m,n] (m

SQL> select abs(dbms_random.random/power(2,32))*(9-3)+3 from dual;

ABS(DBMS_RANDOM.RANDOM/POWER(2,32))*(9-3)+3
-------------------------------------------
                  5.3434754

[m,n] (m select abs(dbms_random.random/power(2,32))*(n-m)+m from dual;

NORMAL函数


  • 作用

    在RANDOM函数的示例中,我们已经讨论了[-1,1]区间上的随机数的生成方法,而NORMAL函数就是专门用于生成[-1,1]上的随机数,[-1,1]上的随机数也叫标准正态分布的随机数。

  • 语法

DBMS_RANDOM.NORMAL
  RETURN NUMBER;
  • 示例
SQL> select dbms_random.normal from dual;

    NORMAL
----------
-.53885116

VALUE函数


  • 作用

在RANDOM函数的示例中,我们已经讨论了[0,1]区间和[m,n](m区间上的随机数的生成方法,而VALUE函数即可以生成[0,1]上的随机数,又可以生成[m,n](m上的随机数,

  • 语法
DBMS_RANDOM.VALUE
  RETURN NUMBER;

DBMS_RANDOM.VALUE(
  low  IN  NUMBER,
  high IN  NUMBER)
RETURN NUMBER;

当没有参数时,返回[0,1]上的随机数。

low参数表示最小值,high参数表示最大值,返回[low,high]区间内的随机数

  • 示例
SQL> select dbms_random.value from dual;

     VALUE
----------
.835104115

SQL> select dbms_random.value(2,8) from dual;

DBMS_RANDOM.VALUE(2,8)
----------------------
        2.62556781

STRING函数


  • 作用

    返回固定长度和格式的随机字符串

  • 语法

DBMS_RANDOM.STRING
   opt  IN  CHAR,
   len  IN  NUMBER)
  RETURN VARCHAR2;

opt参数控制字符串的大小写格式,可选值及含义如下:
‘u’或'U':表示大写字母
‘l’或‘L’:表示小写字母
‘a’或‘A’:表示大小写混合
‘x’或‘X’:表示大写字母和数字混合
‘p’或‘P’:表示任意可显示字符

len表示字符串长度

  • 示例
SQL> select dbms_random.string('u',20) from dual;

DBMS_RANDOM.STRING('U',20)
--------------------------------------------------------------------------------
TBRGRBXIIKHZCEWKYELY

SQL> c/'u'/'l' 
  1* select dbms_random.string('l',20) from dual
SQL> /

DBMS_RANDOM.STRING('L',20)
--------------------------------------------------------------------------------
hujwzvftjdrazveywlkv

SQL> c/'l'/'a'
  1* select dbms_random.string('a',20) from dual
SQL> /

DBMS_RANDOM.STRING('A',20)
--------------------------------------------------------------------------------
LQNjEgWzZABDcAHgDdCU

SQL> c/'a'/'x'
  1* select dbms_random.string('x',20) from dual
SQL> /

DBMS_RANDOM.STRING('X',20)
--------------------------------------------------------------------------------
X0HX6GU4YB9YFTJDFSUH

SQL> c/'x'/'p'
  1* select dbms_random.string('p',20) from dual
SQL> /

DBMS_RANDOM.STRING('P',20)
--------------------------------------------------------------------------------
m6mw/l[%D3BmLsgEi)l%

你可能感兴趣的:(Oracle随机函数)