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我留言啊!