Oracle随机函数—dbms_random

来源:互联网 发布:自建域名服务器 编辑:程序博客网 时间:2024/05/22 00:19
 Oracle随机函数 

1.基础认识

关于这些函数及DBMS_RANDOM包的文件都包含在SQLPlus中:
  select text from all_source 
  where name = 'DBMS_RANDOM' 
  and type = 'PACKAGE' order by line; 

  ◆ TYPE num_array
  ◆ PROCEDURE terminate
  ◆ PROCEDURE seed
  ◆ PROCEDURE initialize
  ◆ FUNCTION random
  ◆ FUNCTION value RETURN NUMBER; 
  ◆ FUNCTION value (low IN NUMBER, high IN NUMBER) RETURN NUMBER; 
  ◆ FUNCTION normal RETURN NUMBER; 
  ◆ FUNCTION string (opt char, len NUMBER) RETURN VARCHAR2; 


2.应用举例

SELECT DBMS_RANDOM.RANDOM FROM DUAL; 
  
再进一步的要求,比如,产生一个0-100的随机数,稍微变通一下就可以了: 
  
select abs(mod(dbms_random.random,100)) from dual

3.进阶说明

dbms_random又有新函数了可以实现这些功能 
FUNCTION value RETURN NUMBER; 
FUNCTION value (low IN NUMBER, high IN NUMBER) RETURN NUMBER; 
FUNCTION normal RETURN NUMBER; 
FUNCTION string (opt char, len NUMBER) RETURN VARCHAR2;  
  
产生N到M之间的随机数 
SELECT DBMS_RANDOM.VALUE(N,M) FROM DUAL; 
  
缺省DBMS_RANDOM.VALUE返回0到1之间的随机数 

SQL> select dbms_random.value, dbms_random.value(55,100) from dual; 
VALUE DBMS_RANDOM.VALUE(55,100) 
--------------- ----------------------------- 
0.714469037747011 68.5593418279622
  
NORMAL函数返回服从正态分布的一组数。此正态分布标准偏差为1,期望值为0。这个函数返回的数值中有68%是介于-1与+1之间,95%介于-2与+2之间,99%介于-3与+3之间。 
最后,是STRING函数。它返回一个长度达60个字符的随机字符串。

用DBMS_RANDOM生成文本和日期值 

数字、文本字符串和日期都是用户会在表格里碰到的三种常见数据类型。虽然你可以用PL/SQL程序包里的DBMS_RANDOM随机生成数字——它确实能够做到这一点——它还能够随机生成文本和日期值。
1.产生随机数字

就让我们先从数字开始。VALUE函数会返回一个大于等于0但是小于1的数,精度是38位。

SELECT DBMS_RANDOM.VALUE FROM DUAL; 

对于指定范围内的整数,要加入参数low_value和high_value,并从结果中截取小数(最大值不能被作为可能的值)。所以对于0到99之间的整数,你要使用下面的代码:

SELECT TRUNC(DBMS_RANDOM.VALUE(0, 100)) FROM DUAL;
2.产生随机文本字符串

要随机生成文本字符串,就要使用STRING函数并编写代码指定字符串的类型和所希望的长度:

SELECT DBMS_RANDOM.STRING('A', 20) FROM DUAL; 

类型代码在《Oracle Database 10g PL/SQL程序包和类型参考(Oracle Database 10g PL/SQL Packages and Types Reference)》有说明。

下面是一些类型的代码:

‘U’用来生成大写字符

‘L’用来生成小写字符

‘A’用来生成大小写混合的字符
3.产生随机日期

Oracle将日期作为过去某个关键日期(如果你好奇的话,我可以告诉你这个日期是公元前4712年1月1日)的整数偏移量来保存。这就意味着你可以通过寻找与你希望的起始日期相对应的整数,然后向它加入一个随机的整数来随机生成一个指定范围内的日期。

使用TO_CHAR函数和‘J’格式代码,你可以为今天的日期生成一个内部日期数:

SELECT TO_CHAR(SYSDATE, 'J') FROM DUAL; 

例如,要生成一个2003年内的任意日期,你可以首先确定2003年1月1日的日期整数;

SELECT TO_CHAR(TO_DATE('01/01/03','mm/dd/yy'),'J')FROM DUAL; 

系统给的结果是2452641。所以要生成该年度内的任意日期,我们就要用带有low_value等于2452641和high_value等于2452641+364参数的DBMS_RANDOM.VALUE,再把它转换成日期:

SELECT TO_DATE(TRUNC(DBMS_RANDOM.VALUE(2452641,2452641+364)),'J') FROM DUAL;
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 大四体育没过怎么办 大二体育挂了怎么办 大学体育刚刚及格怎么办 大学体育课没选怎么办 大专挂科拿不到毕业证怎么办 大学专业课挂科怎么办 专科重修没过怎么办 大学毕业证没领怎么办 大一数学挂科怎么办 大学体育课挂了怎么办 大一考试挂科怎么办 一年级孩子考试不及格怎么办 孩子一年级数学不及格怎么办 一年级孩子考试紧张怎么办 健身动作不标准怎么办 足球赛踢平了怎么办 踢球指甲淤血了怎么办 初中一年级成绩差怎么办 着火了怎么办小班教案 小孩爱玩游戏怎么办 幼儿上学哭闹老师怎么办 孩子不喜欢上幼儿园怎么办 幼儿喜欢脱鞋怎么办 幼儿在教室乱跑怎么办 转学学校不接收怎么办 留守儿童成绩差怎么办 感冒鼻孑堵咳嗽哮喘怎么办 二年级数学报怎么办 不敢翻前滚翻怎么办啊 大学全挂了怎么办 幼儿园热了怎么办教案 幼儿园小班热了怎么办教案 高考艺术生色弱怎么办 雾眉后出现白棱怎么办 lol皮肤重复了怎么办 怕篮球砸到怎么办 前滚翻向一侧偏怎么办 大腿肌肉比较发达怎么办 学计算机老了怎么办 新生儿头尖尖的怎么办 手抻筋了很疼怎么办