Oracle随机函数调用。简单得说,通过dbms_random包调用随机数的方法大致有4种:
1、dbms_random.normal
这个函数不带参数,能返回normal distribution的一个number类型,所以基本上随机数会在-1到1之间。
简单测试了一下,产生100000次最大能到5左右:
SQL》 declare
2 i number:=0;
3 j number:=0;
4 begin
5 for k in 1 .。 100000 loop
6 i:= dbms_random.normal;
7 if i 》 j
8 then j:=i;
9 end if;
10 end loop;
11 dbms_output.put_line(j);
12 end;
13 /
5.15325081797418404136433867107468983182
PL/SQL procedure successfully completed
2、dbms_random.random
这个也没有参数,返回一个从-power(2,31)到power(2,31)的整数值
3、dbms_random.value
这个函数分为两种,一种是没有参数,则直接返回0-1之间的38位小数
SQL 》 column value format 9.99999999999999999999999999999999999999
SQL 》 select dbms_random.value from dual;
VALUE
-----------------------------------------
。58983014999643548701631750396301271752
第二种是加上两个参数a、b,则返回值在a、b之间的38位小数
SQL 》 column value format 999.999999999999999999999999999999999999
SQL 》 select dbms_random.value(100,500) value from dual;
VALUE
-----------------------------------------
412.150194612502916808701157054098274240
注意:无论前面几位,小数点之后都是38位
4、dbms_random.string
这个函数必须带有两个参数,前面的字符指定类型,后面的数值指定位数(最大60)
类型说明:
‘u’,‘U’ : upper case alpha characters only
‘l’,‘L’ : lower case alpha characters only
‘a’,‘A’ : alpha characters only (mixed case)
‘x’,‘X’ : any alpha-numeric characters (upper)
‘p’,‘P’ : any printable characters
SQL 》 column value format a30
SQL 》 select dbms_random.string(‘u’,30) value from dual;
VALUE
VTQNLGISELPXEDBXKUZLXKBAJMUTIA
SQL 》 select dbms_random.string(‘l’,30) value from dual;
VALUE
------------------------------
uqygsbquingfqdytpgjvdoblxeglgu
SQL 》 select dbms_random.string(‘a’,30) value from dual;
VALUE
------------------------------
NGTGkQypuSWhBfcrHiOlQwOUXkqJjy
SQL 》 select dbms_random.string(‘x’,30) value from dual;
VALUE
------------------------------
UVWONYJMXT31VEFPD736WJCJ5QT6BD
SQL 》 select dbms_random.string(‘p’,30) value from dual;
VALUE
------------------------------
:mak$(WT4M_7c/+f[_XUscf$P Zcq{
5、关于seed
可以设置seed来确定随机数的起始点,对于相同的seed而言,随机数的任意一次变化都将是确定的。
就是说,如果在某一时刻调用了seed,之后第一次产生的随机数是4,第二次是6,第三次是1,那么当你再次调用相同的seed之后,一次产生的随机数还是4、6、1
seed有两种,一种是数值型的,一种是字符型(最大长度2000)的
—— Seed with a binary integer
PROCEDURE seed(val IN BINARY_INTEGER );
PRAGMA restrict_references (seed, WNDS );
—— Seed with a string (up to length 2000)
PROCEDURE seed(val IN VARCHAR2 );
PRAGMA restrict_references (seed, WNDS );
6、关于initialize
一个integer参数,注释说的很清楚了:
—— Obsolete, just calls seed(val)
PROCEDURE initialize(val IN BINARY_INTEGER );
PRAGMA restrict_references (initialize, WNDS );
sys_guid()
官方文档的说明如下:
SYS_GUID generates and returns a globally unique identifier (RAW value) made up of 16 bytes. On most platforms, the generated identifier consists of a host identifier, a process or thread identifier of the process or thread invoking the function, and a nonrepeating value (sequence of bytes) for that process or thread.
简单得说就是,随机生成一个32位的RAW,但是后面的那段经过实验发现不是这么回事,每次生成的字符串都千差万别,不知道为什么。
在具体应用中,除了可以用来插入生成唯一的标识符外,还可以用来取表中的任意一条记录:
select * from ( select * from t2 order by sys_guid()) where rownum = 1 ;
powershell
1、dbms_random.normal
这个函数不带参数,能返回normal distribution的一个number类型,所以基本上随机数会在-1到1之间。
简单测试了一下,产生100000次最大能到5左右:
SQL》 declare
2 i number:=0;
3 j number:=0;
4 begin
5 for k in 1 .。 100000 loop
6 i:= dbms_random.normal;
7 if i 》 j
8 then j:=i;
9 end if;
10 end loop;
11 dbms_output.put_line(j);
12 end;
13 /
5.15325081797418404136433867107468983182
PL/SQL procedure successfully completed
2、dbms_random.random
这个也没有参数,返回一个从-power(2,31)到power(2,31)的整数值
3、dbms_random.value
这个函数分为两种,一种是没有参数,则直接返回0-1之间的38位小数
SQL 》 column value format 9.99999999999999999999999999999999999999
SQL 》 select dbms_random.value from dual;
VALUE
-----------------------------------------
。58983014999643548701631750396301271752
第二种是加上两个参数a、b,则返回值在a、b之间的38位小数
SQL 》 column value format 999.999999999999999999999999999999999999
SQL 》 select dbms_random.value(100,500) value from dual;
VALUE
-----------------------------------------
412.150194612502916808701157054098274240
注意:无论前面几位,小数点之后都是38位
4、dbms_random.string
这个函数必须带有两个参数,前面的字符指定类型,后面的数值指定位数(最大60)
类型说明:
‘u’,‘U’ : upper case alpha characters only
‘l’,‘L’ : lower case alpha characters only
‘a’,‘A’ : alpha characters only (mixed case)
‘x’,‘X’ : any alpha-numeric characters (upper)
‘p’,‘P’ : any printable characters
SQL 》 column value format a30
SQL 》 select dbms_random.string(‘u’,30) value from dual;
VALUE
VTQNLGISELPXEDBXKUZLXKBAJMUTIA
SQL 》 select dbms_random.string(‘l’,30) value from dual;
VALUE
------------------------------
uqygsbquingfqdytpgjvdoblxeglgu
SQL 》 select dbms_random.string(‘a’,30) value from dual;
VALUE
------------------------------
NGTGkQypuSWhBfcrHiOlQwOUXkqJjy
SQL 》 select dbms_random.string(‘x’,30) value from dual;
VALUE
------------------------------
UVWONYJMXT31VEFPD736WJCJ5QT6BD
SQL 》 select dbms_random.string(‘p’,30) value from dual;
VALUE
------------------------------
:mak$(WT4M_7c/+f[_XUscf$P Zcq{
5、关于seed
可以设置seed来确定随机数的起始点,对于相同的seed而言,随机数的任意一次变化都将是确定的。
就是说,如果在某一时刻调用了seed,之后第一次产生的随机数是4,第二次是6,第三次是1,那么当你再次调用相同的seed之后,一次产生的随机数还是4、6、1
seed有两种,一种是数值型的,一种是字符型(最大长度2000)的
—— Seed with a binary integer
PROCEDURE seed(val IN BINARY_INTEGER );
PRAGMA restrict_references (seed, WNDS );
—— Seed with a string (up to length 2000)
PROCEDURE seed(val IN VARCHAR2 );
PRAGMA restrict_references (seed, WNDS );
6、关于initialize
一个integer参数,注释说的很清楚了:
—— Obsolete, just calls seed(val)
PROCEDURE initialize(val IN BINARY_INTEGER );
PRAGMA restrict_references (initialize, WNDS );
sys_guid()
官方文档的说明如下:
SYS_GUID generates and returns a globally unique identifier (RAW value) made up of 16 bytes. On most platforms, the generated identifier consists of a host identifier, a process or thread identifier of the process or thread invoking the function, and a nonrepeating value (sequence of bytes) for that process or thread.
简单得说就是,随机生成一个32位的RAW,但是后面的那段经过实验发现不是这么回事,每次生成的字符串都千差万别,不知道为什么。
在具体应用中,除了可以用来插入生成唯一的标识符外,还可以用来取表中的任意一条记录:
select * from ( select * from t2 order by sys_guid()) where rownum = 1 ;
powershell
发表评论
-
Oracle函数介绍:decode
2011-12-10 14:49 743Sql代码 select sum( ... -
任重道远迁移路之DB2到Oracle
2011-11-25 10:56 812迁移之路任重而道远, ... -
GLOBAL_NAMES参数的详细研究
2011-11-23 12:59 882Oracle数据库GLOBAL_NAMES参数的相关知识是 ... -
Oracle作业job 没有自动调度起来
2011-11-22 11:52 1346Oracle作业job 没有自动调度起来 问题:有一同事报 ... -
Oracle与MySQL的几点区别
2011-11-21 11:46 728Oracle数据库与MySQL数据库的区别是本文我们主要要介绍 ... -
Oracle 丢失更新问题的解决方案
2011-11-18 14:44 732丢失更新是数据中一个比较常见的经典问题,在做项目时我们有时可能 ... -
ORACLE 临时表空间使用率过高的原因及临时解决方案
2011-11-16 15:47 773数据库temp临时表空间增 ... -
Oracle 10g创建表空间步骤详解
2011-11-15 11:11 749Oracle 10g数据库中,当在数据库中创建用户时,基于应用 ... -
Oracle中的软解析和硬解析
2011-10-14 14:04 668问题一:哪个进程 ... -
F5 BIG-IP支持运行Oracle
2011-10-13 15:14 71010月13日,全球领先的应用交付网络厂商 F5 Netwo ... -
Oracle移动应用跨整个企业应用产品组合,发展势头迅猛
2011-10-12 14:39 1098甲骨文应用开发集 ... -
甲骨文推出oracle社交网络
2011-10-11 14:08 753在甲骨文全球大会 ... -
oracle数据库完整性约束规则
2011-10-10 15:28 631完整性约束用于增强数据的完整性,Oracle提供了5种完整 ... -
Oracle融合应用软件为企业在云计算中带来新的业务变革
2011-10-09 16:18 735Oracle融合应 ... -
Oracle 与戴尔携手:IT与业务融为一体
2011-10-08 14:55 6402011年10月4日,在Oracle Op ... -
应用Oracle组件实现动态Web数据库
2011-09-29 15:45 7901、用Oracle WebServer构建Web数据库应用 ... -
怎样做好数据库管家 怎么管理Oracle数据库
2011-09-28 15:01 696Oracle是一个最早商 ... -
http://www.oracleonline.net/home.php?mod=space&uid=7029&do=blog&quickforward=1&i
2011-09-27 11:56 2275凤凰网科技讯 北京时间9月27日消息,据彭博社报道,甲骨文联席 ... -
甲骨文教育基金会诚邀学生参加2012
2011-09-23 16:38 615· 2012年ThinkQuest竞赛由甲骨文教育基金会( ... -
Oracle在MySQL中新增商业扩展插件
2011-09-20 13:40 564racle目前宣布,支持为MySQL数据库新增商业扩展插件,但 ...
相关推荐
标签"Oracle 自定义函数"强调了这个函数是在Oracle环境中实现的,这意味着它必须遵循Oracle的语法和规范,且可以被其他Oracle SQL查询或PL/SQL程序调用。 从文件名"统一代码Oracle函数效验"我们可以推测,压缩包内...
根据提供的文件信息,本文将对Oracle与SQL Server中的常用数学函数进行对比分析。这些函数包括绝对值、向上取整、向下取整、截断、四舍五入、指数计算、自然对数、以10为底的对数、平方、平方根、幂运算以及随机数和...
最后,这个函数可以这样调用: ```sql SELECT get_next_workday(SYSDATE) FROM dual; ``` 这将返回当前日期之后的第一个工作日。 总结,Oracle中获取下一个法定工作日期涉及对日期的运算、节假日表的管理以及PL/...
在Oracle数据库管理中,有时我们需要向数据库表中插入大量的随机数据来进行测试、演示或者数据模拟分析等工作。本篇文章将详细介绍如何利用自定义的Oracle函数来实现这一功能。 #### 自定义Oracle函数 为了实现向...
4. 调用 DBMS_RANDOM.VALUE 函数生成随机数,并将其存储在临时表 tmp_2 中。 5. 将临时表 tmp_1 和 tmp_2 相关联,取得符合条件的随机记录。 6. 最后,删除临时表 tmp_1、tmp_2 和序列号 tmp_id。 例如,以下是使用...
Oracle的DBMS_RANDOM是一个强大的包,它提供了多种用于生成随机数据的函数,广泛应用于测试、数据分析、模拟等场景。在Oracle数据库中,你可以利用这些函数来创建不可预测的数据,这对于测试应用程序或者填充测试...
2. **使用DBMS_RANDOm包**:Oracle提供了一系列随机数生成函数,如DBMS_RANDOM.STRING和DBMS_RANDOM.VALUE,可以用来创建随机的数据。 3. **PL/SQL脚本**:编写PL/SQL过程,根据业务逻辑生成复杂的数据结构。 4. **...
- **常用函数**:列出Oracle数据库中常用的函数及其用途。 - **substr函数**:用于提取字符串的子串。 - **Lpad/Rpad函数**:左填充或右填充字符串。 - **日期函数**:处理日期和时间数据。 - **随机取前10条...
Oracle提供了几个内置函数来帮助我们生成随机的小数、整数、字符串以及日期。下面我们将详细讨论这些函数的使用方法。 1. 随机小数:`dbms_random.value(low, high)` 这个函数用于生成一个在`low`(包含)和`high`...
8. 数据类型和控制结构:PL/SQL数据类型包括DATE,标识符最大长度为30,BLOB用于存储二进制大对象,EXIT用于跳出循环,CEIL函数返回大于或等于给定数值的最小整数。 9. 数据字典视图:V$CONTROLFILE提供控制文件...
这部分介绍了 Oracle 数据库中常用的函数,包括: - **SUBSTR函数**:用于从字符串中提取子串。 - **LPAD/RPAD函数**:用于在字符串左侧或右侧填充指定字符。 - **日期函数**:如 SYSDATE 和 ADD_MONTHS 等,用于...
- **常用函数**:文档列出了多种Oracle数据库中的常用函数,如`substr`、`lpad/rpad`等。 - **日期函数**:包括`trunc`等用于日期处理的函数。 - **随机取前10条不同的记录**:介绍了一种获取随机样本的方法。 - ...
- **工具-数据生成器**:生成随机数据以填充测试表。 - **工具-任务列表**:管理任务列表。 - **工具-重新调用声明**:快速访问最近使用的对象。 - **文件-目录**:配置文件系统的路径和目录。 - **文件-扩展名...
- **数据处理技巧**:提供实用的数据处理技巧,例如如何随机选取不同记录、使用`TRUNC`函数进行截断等。 - **表操作**:教授表的修改、删除、优化等操作。 - **Oracle定时器**:探讨如何使用Oracle的定时器功能,...
- **随机取前10条不同的记录**:获取随机样本数据。 - **TRUNC函数**:截断数字或日期。 - **修改表的一些常用语法**:包括ALTER TABLE等命令。 - **舍入函数**:处理数值的四舍五入。 - **实现类似BREAK语句**:...
- **随机取样**:学习如何随机选取数据库中的记录,适用于大数据分析场景。 - **TRUNC函数应用**:掌握日期截断与数值截断的使用场景。 - **表修改语法**:熟悉修改表结构的常用SQL语法,便于数据模型的调整。 - **...
- **rand(0,1)**:随机函数依赖于种子或内部状态,不是引用透明的。 4. **动态数据结构**: 对于需要动态插入和删除数据项的应用,适合的数据结构是: - **栈(Stack)**:后进先出,不适合频繁插入和删除。 - ...
- **创建程序**:支持快速创建新的 PL/SQL 单元,如存储过程、函数等。 - **保存程序**:提供了多种方式来保存开发中的程序代码,便于后续的维护和版本控制。 - **修改程序**:集成了强大的代码编辑功能,支持语法...
1. **链接过程**:详细解释了链接器如何解析依赖关系,将函数调用和全局变量引用与相应的定义相匹配,以及如何处理重定位信息。 2. **静态链接与动态链接**:介绍静态链接(生成独立的可执行文件)和动态链接(运行...