`

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;

 

select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;//mi是分钟

分享到:
评论

相关推荐

    Oracle随机函数之dbms_random使用详解

    dbms_random是oracle提供的一个随机函数包,以下介绍一些dbms_random的常用示例: dbms_random.value用法: 生成一个大于等于0,小于等于1的38位小数 代码如下: — FUNCTION value RETURN NUMBER; select dbms_...

    论文研究-实例依赖的可验证随机函数的高效构造.pdf

    实例依赖的可验证随机函数是由文献[1]提出的一个新的密码...基于非交互ZAP证明系统和random oracle模型中∑OR-协议,给出了实例依赖的可验证伪随机函数的两个高效的实现和相应的安全性证明,提升了这一工具的应用价值。

    Oracle字符集id,16位id以及name

    ID ID(Hex) Name ID ID(Hex) Name ID ID(Hex) Name 1 0001 US7ASCII 2 0002 WE8DEC 3 0003 WE8HP 4 0004 US8PC437 5 0005 WE8EBCDIC37 6 0006 WE8EBCDIC500 7 0007 WE8EBCDIC1140 8 0008 WE8EBCDIC285 9 0009

    Oracle插入随机数

    自定义Oracle函数,向Oracle数据库中插入随机数。

    oracle 10进制转34进制 sql

    一个SQL脚本函数,10进制转换为34进制。34进制指以0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F、G、H、J、K、L、M、N、P、Q、R、S、T、U、V、W、X、Y、Z为基数做累加。

    Oracle基础之group by和聚合函数

    当我们刚开始学Oracle时,见到group by,常常会来个三连问:为什么要用group by?group by应该怎么用?为什么写了group by运行时会提示“不是单组分组函数;不符合group by语法”?面对这些问题,我都胆战心惊了...

    Oracle高级sql学习与练习

    1、集合操作 2、EXISTS和NOT EXISTS的使用 3、WITH字句 4、MERGE INFO 合并资料 5、层次查询(HIERARICAL RETRIVEL) 6、DECODE函数和行列互换 7、CASE表达式 8、ROWNUM-TOP-N分析 ...25、专题-随机值查询

    随机获取oracle数据库中的任意一行数据(rownum)示例介绍

    最近看oracle资料的时候,了解rownum的概念,以前只知道对数据库表进行简单的增删改查; 看到了rownum的概念后,突然想到了好多业务场景应该都可以适用的,比如在进行随机发奖的时候, 我们就可以从先查一下奖品表中...

    ORACLE9i_优化设计与系统调整

    §13.2.1 使用函数索引 165 §13.2.2 使用位图索引- 166 §13.2.3 使用B树索引- 166 §13.2.4 使用反向键索引- 166 §13.2.5 使用索引组织表 166 §13.3 使用范围索引 166 §13.4 使用簇 - 167 §13.5 使用Hash 簇 -...

    取不重复的N个随机数

    随机函数的用法,数组的用法,GOTO语句的用法

    数据库查询排序使用随机排序结果示例(Oracle/MySQL/MS SQL Server)

    Oracle查询结果集,随机排序 代码如下:select * from table1 order by dbms_random.value(); MySQL随机查询出一条记录: 代码如下: — 下面的查询语句效率高,不要使用 SELECT * FROM table1 ORDER BY rand() LIMIT ...

    witnet-rust:Rust:eye_selector::crab:中Witnet分散式oracle网络协议的开源实现

    :实现Witnet使用的所有与密码有关的所有操作的库,包括签名,哈希函数和可验证的随机函数。 :一位翻译列入Witnet数据请求脚本。 : node和wallet使用的便捷本地存储解决方案。 :用于管理对等会话和连接的模块。 ...

    Oracle之DBMS_RANDOM包详解

    DBMS_RANDOM是Oracle提供的一个PL/SQL包,用于生成随机数据和字符。它具有以下函数。  其中,initialize,random,terminate函数在Oracle11g中已不推荐使用,主要用于向后兼容。下面对各个函数进行举例说明  1. ...

    Oracle 随机数

    利用oracle的dbms_random包结合rownum来实现,示例如下,随机取499户: select * from ( select * from busi.t_ar_userinfo order by dbms_random.value) where rownum < 500; 有关dbms_random的参考文献,链接...

    Oracle如何实现从特定组合中随机读取值

     一、利用DBMS_RANDOM.RANDOM函数随机生成数值,然后对数值进行取模,如果我们要在10个元素中随机读取的话,那我们需要对10进行取模。  二、再将取模后的值利用CASE WHEN语句与元素进行关联。  譬如,我有一个...

    oracle chm帮助文件下载

    怎么获得今天是星期几,还关于其它日期函数用法 [Q]随机抽取前N条记录的问题 [Q]抽取从N行到M行的记录,如从20行到30行的记录 [Q]怎么样抽取重复记录 [Q]怎么样设置自治事务 [Q]怎么样在过程中暂停指定时间 [Q]...

    Java面试笔试题

    1写出你能记住的圆周率最多位2写出歌德巴赫猜想的内容3有一映射函数 y=f(x),已知f(1)=1,f(1.99)=1,现要求对x的n+1位四舍五入,试写出映射函数4如果你现在要开发一种语言,现要设计一随机函数Random(m),可以去...

    rlearner:异构处理效果的准Oracle估计

    rlearner:R-学习器,用于对异类治疗效果进行准Oracle估计正如Nie和Wager(2017)所建议的那样,该程序包实现了R学习器来估计异构处理效果。 我们考虑一种设置,在该设置中,我们观察根据以下常规非参数模型生成的...

    RSA-OAEP-matlab:使用Matlap进行RSA-OAEP加密-解密-matlab开发

    在OAEP将charachters uint8表示形式转换为使用SHA-256之类的随机Oracle哈希函数的随机编码之后,使用随机的n位素数来使rsa加密消息。 RSA然后使用两个随机素数生成公钥和私钥,使用公钥加密消息,将其保存在文件中...

Global site tag (gtag.js) - Google Analytics