Oracle 里抽取随机数的多种方法
在你的工作中是否会为了某个活动要随机取出一些符合条件的 EMAIL 或者手机号码
用户,来颁发获奖通知或其它消息?本文以实例的方式来讲解如何抽取随机数的多种方法。
如果是的话,可以用 oracle 里生成随机数的 PL/SQL, 目录文件名在:
/ORACLE_HOME/rdbms/admin/dbmsrand.sql。
用之前先要在 sys 用户下编译:SQL>@/ORACLE_HOME/rdbms/admin/
dbmsrand.sql。
它实际是在 sys 用户下生成一个 dbms_random 程序包,同时生成公有同义词,并
授权给所有数据库用户有执行的权限。
使用 dbms_random 程序包, 取出随机数据的方法:
1. 先创建一个唯一增长的序列号 tmp_id:
create sequence tmp_id increment by 1 start with 1
maxvalue 9999999 nocycle nocache;
2. 然后创建一个临时表 tmp_1,把符合本次活动条件的记录全部取出来:
create table tmp_1 as select tmp_id.nextval as id,
email,mobileno from 表名 where 条件;
找到最大的 id 号:select max(id) from tmp_1;。
3. 设定一个生成随机数的种子:
execute dbms_random.seed(12345678);
或者
execute dbms_random.seed
(TO_CHAR(SYSDATE,'MM-DD-YYYY HH24:MI:SS'));
4. 调用随机数生成函数 dbms_random.value 生成临时表 tmp_2(假设随机取
200 个):
create table tmp_2 as select trunc
(dbms_random.value(1,5000)) as id from tmp_1 where