收 藏 投 稿 繁 体 RSS 
站长吧-中国站长学习与交流的网站
首 页 运 营 学 院 建 站 论 坛
Web master8.net  
 网站运营  
  欢迎在本站发布信息,在线投递稿件请点这里。编辑QQ:4908220,欢迎联系交流。
业界动态 创业故事 推广研究 策划盈利 电子商务 企业平台
  站长工具
SEO查询 Whois查询 Pr查询 域名查询 IP查询 网页编辑器
 建站服务  
  如有建站意向,请尽快联系我们,以便安排时间... 建站服务 QQ4908220 QQ:4908220
作品展示 服务范围 服务流程 服务报价 联系方式 付款方式
文章正文  » 您的当前位置: 首页 >> 学院 >> 数据库 >> Oracle
ORACLE里取随机数的方法
  来源:互联网 | 时间:2006-04-25 | 浏览:   相关评论 | 报告错误 | 发布文章
【字号: | | 】 【背景色 杏仁黄 秋叶褐 胭脂红 芥末绿 天蓝 雪青 灰 银河白(默认色)


在你的工作中是否会为了某个活动要随机取出一些符合条件的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;



假设为5000



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 rownum<201;

[ 说明:dbms_random.value(1,5000)是取1到5000间的随机数,会有小数,

trunc函数对随机数字取整,才能和临时表的整数ID字段相对应。



注意:如果tmp_1记录比较多(10万条以上),也可以找一个约大于两百行的表(假如是tmp_3)来生成tmp_2

create table tmp_2 as select trunc(dbms_random.value(1,5000)) as id from tmp_3 where rownum<201; ]

5. tmp_1和tmp_2相关联取得符合条件的200用户

select t1.mobileno,t1.email from tmp_1 t1,tmp_2 t2 where t1.id=t2.id;

[ 注意:如果tmp_1记录比较多(10万条以上),需要在id字段上建索引。]

也可以输出到文本文件:

set pagesize 300;

spool /tmp/200.txt;

select t1.mobileno,t1.email from tmp_1 t1,tmp_2 t2 where t1.id=t2.id order by t1.mobileno;

spool off;

6. 用完后,删除临时表tmp_1、tmp_2和序列号tmp_id。

master8
  • 上一篇:Oracle大批量删除数据方法
  • 下一篇:Skype出台海外赔偿方案

  • 我要投稿  打印本文  推荐本文  加入收藏  返回顶部  关闭窗口
    搜模板(www.somoban.com) 原创网站模板交易平台
    阿里妈妈再掀疯狂采购风,网站广告位严重告急,急召天下站长
    基于PHP+MySQL的整站、模块、插件开发等或者按需求实现相应功能;
基于各PHP主流建站系统CMS,BBS,BLOG等的模板定制,完全手写代码;
整站数据迁移或备份恢复;网页代码优化、重构;整站常规SEO优化;网站技术支持;
点击了解详情...
    站长论坛
    • 验证码: