oracle要對一個欄位產生隨機數

賀子_DBA時代發表於2015-04-25
需求對方我公司的產品是一路撈導航網站。主頁圖片重新整理的有點慢,就想把原來只用一個域名來重新整理圖片的過程改成四個域名來重新整理,四個並行重新整理可以提高速度,交給我運算元據庫的任務就是:修改表中的關於圖片的欄位的內容,
SQL> select MAINIMAGEURL   from  test_nav_en_us.tb_type_main where rownum <6;

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











我的任務是要把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部落格 ” ,連結:http://blog.itpub.net/29654823/viewspace-1600232/,如需轉載,請註明出處,否則將追究法律責任。

相關文章