ITPub博客

首页 > 数据库 > Oracle > oracle要对一个字段产生随机数

oracle要对一个字段产生随机数

原创 Oracle 作者:贺子_DBA时代 时间:2015-04-25 13:45:14 0 删除 编辑
需求:对方我公司的产品是一路捞导航网站。主页图片刷新的有点慢,就想把原来只用一个域名来刷新图片的过程改成四个域名来刷新,四个并行刷新可以提高速度,交给我操作数据库的任务就是:修改表中的关于图片的字段的内容,
SQL> select MAINIMAGEURL   from  test_nav_en_us.tb_type_main where rownum <6;

MAINIMAGEURL
--------------------------------------------------------------------------------

http://m0.16lao.com/v1/tfs/T1EaJTB7dj1RXrhCrK.jpg


我的任务是要把m后面的0这个数字平均改成0,1,2,3这样就把一个域名改成了四个,具体怎么实现我不太清楚。
操作步骤:
1,利用拼接和截取以及round对m后的数字取随机数,
update TB_PAD_INFO_INDEX t  
set t.MAINIMAGEURL=substr(t.MAINIMAGEURL,1,8)||round(dbms_random.value(0,3),0)||substr(t.MAINIMAGEURL,10,100);
2,因为是随机数,肯定到不到完全平均的效果,所以先查看现在分配的结果,
select substr(t.MAINIMAGEURL,9,1),count(*) from tb_pad_info_index t
group by substr(t.MAINIMAGEURL,9,1);

 1 453
 3 246
 0 214
 2 447
3,根据上面的结果,把m1给m0分配120个,再把m2给m3分配100,借助伪列rownum:
update TB_PAD_INFO_INDEX t
set t.MAINIMAGEURL=substr( t.MAINIMAGEURL,1,8)||0||substr( t.MAINIMAGEURL,10,100)
where  substr( t.MAINIMAGEURL,9,2)='m1' and rownum<=120;
update TB_PAD_INFO_INDEX t
set t.MAINIMAGEURL=substr( t.MAINIMAGEURL,1,8)||3||substr( t.MAINIMAGEURL,10,100)
where  substr( t.MAINIMAGEURL,9,2)='m2' and rownum<=100;
反正目的就是尽可能的平均一下。
再次查看分配结果:
select substr(t.MAINIMAGEURL,9,1),count(*) from tb_pad_info_index t
group by substr(t.MAINIMAGEURL,9,1);
 1 333
 3 346
 0 334
 2 345

其实如果数据量不是很大的话,可以借助excl工具,和UE编辑器,以及plsql\developer 完成任务。














来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29654823/viewspace-1600232/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
10年数据库管理员从业经历,熟悉Oracle、mysql、tidb、oceanbase、redis、 mongodb 、python等技术栈,持有11g ocm 、mysql 5.7 ocp 、tidb 5.0 ptcp、tidb 6.0 ptca、oceanbase obcp等

注册时间:2014-05-12

  • 博文量
    327
  • 访问量
    2148952