oracle提供了一个更强大的PROCEDURE DBMS_RANDOM过程

来源:互联网 发布:手游热血传奇源码 编辑:程序博客网 时间:2024/04/28 08:27

j经过研究发现oracle中貌似没有mssql中的rand()直接取随机数的函数。难道oracle中就不能取随机数了?答案是否定的。虽然没有rand()函数,但是oracle提供了一个更强大的PROCEDURE DBMS_RANDOM过程,且看下面示例:

17:00:59 SQL> desc dbms_random;
Element    Type     
---------- ---------
SEED       PROCEDURE
VALUE      FUNCTION 
NORMAL     FUNCTION 
STRING     FUNCTION 
INITIALIZE PROCEDURE
RANDOM     FUNCTION 
TERMINATE  PROCEDURE
NUM_ARRAY  TYPE     

使用desc命令查看该过程的结构,其中我们需要用到的也就values 、normal、string、random这四个函数吧,这四个函数都具有取随机值的功能,具体呢就不太一样了。

且看:

17:01:06 SQL> select dbms_random.value() from dual;
 
DBMS_RANDOM.VALUE()
-------------------
 0.0536824248407651

17:05:09 SQL> select dbms_random.value(10,100) from dual;
 
DBMS_RANDOM.VALUE(10,100)
-------------------------
         29.2420951206225

17:05:27 SQL> select dbms_random.value(-1,-4) from dual;
 
DBMS_RANDOM.VALUE(-1,-4)
------------------------
       -3.98278017569502

参照oracle官方文档解释呢,value函数用于返回两个数值之间的随机数,value(low,high),如果你想得到的数值结果介于两个数之间呢,就用value了。

17:05:37 SQL> select dbms_random.normal() from dual;
 
DBMS_RANDOM.NORMAL()
--------------------
    1.09252306706526
 
17:08:10 SQL> select dbms_random.normal() from dual;
 
DBMS_RANDOM.NORMAL()
--------------------
  -0.279331762111692

至于normal函数呢,那就是真正的随机数啦,出来的结果呢肯定不会让你猜到拉(如果你猜对了,恭喜你,你可以去买彩票啦!)

再看random函数

17:08:12 SQL> select dbms_random.random() from dual;
 
DBMS_RANDOM.RANDOM()
--------------------
          1936087379
 
17:10:30 SQL> select dbms_random.random() from dual;
 
DBMS_RANDOM.RANDOM()
--------------------
          -972915078

查看官方文档说的是random函数返回的值介于2的31次方和-2的31次方之间的整形数值。为啥是2的31次方呢?偷偷告诉你,oracle中支持最大的浮点数就是2的31次方啦,要是超过了的话oracle就不认识他了。

刚才我们看了三个都是产生的是数值型的数据,但是如果我们要字符型的数据呢?是不是就没有办法了呢?oracle肯定不会不考虑到这点的,那就是剩下来的string函数啦,光看他字面意思想必聪明的人就猜到了。

具体且看string函数:

17:10:32 SQL> select dbms_random.string('a',10) from dual;
 
DBMS_RANDOM.STRING('A',10)
--------------------------------------------------------------------------------
NKUoBATpqY
 
17:14:52 SQL> select dbms_random.string('u',10) from dual;
 
DBMS_RANDOM.STRING('U',10)
--------------------------------------------------------------------------------
VROIAWDULZ
 
17:14:58 SQL> select dbms_random.string('l',10) from dual;
 
DBMS_RANDOM.STRING('L',10)
--------------------------------------------------------------------------------
vknoaqgtqu
 
17:15:02 SQL> select dbms_random.string('x',10) from dual;
 
DBMS_RANDOM.STRING('X',10)
--------------------------------------------------------------------------------
7DGCOH2MW6

17:15:10 SQL> select dbms_random.string('p',10) from dual;
 
DBMS_RANDOM.STRING('P',10)
--------------------------------------------------------------------------------
+^nKo<p[Q_
 大家应该发现了什么吧,string函数是带参数的,两个参数,前面参数代表意思呢是指返回何种字符型数据,后面的当然就是返回字符型数据的长度啦。下面就解释下前面参数的意义。

a呢代表返回的字符型数据呢都是字母组成的,且不分大小写,

u呢代表返回大写的字母组成的字符型数据

l代表返回小写的字母组成的字符型数据

x代表返回字母和数字组合的字符型数据而且都是大写的(貌似要小写的就不知道怎么办了难道oracle忘了?)

p呢返回的是所有可输出显示的字符型类型的数据(也就是杂七杂八的啦)

string是不是很神奇啊?oracle太强大了!呵呵!

好了!关于dbms_random的介绍就到这里了。有啥不懂的话给Javan我留言啊!

原创粉丝点击