您当前的位置: 首页 > 数据库教程 > Oracle教程 > 实例讲解Oracle里抽取随机数的多种方法

实例讲解Oracle里抽取随机数的多种方法

作者:guanchaofeng 来源:不详 发布时间: 2009-06-27 20:56 点击:
在你的工作中是否会为了某个活动要随机取出一些符合条件的EMAIL或者手机号码用户,来颁发获奖通知或其它消息?本文以实例的方式来讲解如何抽取随机数的多种方法。 如果是的话,可以用oracle里生成随机数的PL/SQL,目录文件名在:/ORACLE_HOME/rdbms/admin/dbm

实例讲解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:
  
  createsequencetmp_idincrementby1startwith1maxvalue9999999nocyclenocache;
  
  2.然后创建一个临时表tmp_1,把符合本次活动条件的记录全部取出来:
  
  createtabletmp_1asselecttmp_id.nextvalasid,email,mobilenofrom表名where条件;
  
  找到最大的id号:selectmax(id)fromtmp_1;。
  
  3.设定一个生成随机数的种子:
  
  executedbms_random.seed(12345678);或者executedbms_random.seed(TO_CHAR(SYSDATE,'MM-DD-YYYYHH24:MI:SS'));
  
  4.调用随机数生成函数dbms_random.value生成临时表tmp_2(假设随机取200个):
  
  createtabletmp_2asselecttrunc(dbms_random.value(1,5000))asidfromtmp_1whererownum<201;
  
  [说明:dbms_random.value(1,5000)是取1到5000间的随机数,会有小数,
  
  trunc函数对随机数字取整,才能和临时表的整数ID字段相对应。
  
  注意:如果tmp_1记录比较多(10万条以上),也可以找一个约大于两百行的表(假如是tmp_3)来生成tmp_2
  
  createtabletmp_2asselecttrunc(dbms_random.value(1,5000))asidfromtmp_3whererownum<201;]
  
  5.tmp_1和tmp_2相关联取得符合条件的200用户
  
  selectt1.mobileno,t1.emailfromtmp_1t1,tmp_2t2wheret1.id=t2.id;
  
  [注意:如果tmp_1记录比较多(10万条以上),需要在id字段上建索引。]
  
  也可以输出到文本文件:
  
  setpagesize300;spool/tmp/200.txt;selectt1.mobileno,t1.emailfromtmp_1t1,tmp_2t2wheret1.id=t2.idorderbyt1.mobileno;spooloff;
  
  6.用完后,删除临时表tmp_1、tmp_2和序列号tmp_id。

分享到:
本文"实例讲解Oracle里抽取随机数的多种方法"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4