一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Oracle - Oracle 隨機數

Oracle 隨機數

2019-10-31 16:21Oracle教程網 Oracle

用于抽樣統計,從數據庫中按類別隨機 抽取各類用戶

利用oracle的dbms_random包結合rownum來實現,示例如下,隨機取499戶: 
select * from 
( select * from busi.t_ar_userinfo order by dbms_random.value) 
where rownum < 500; 

有關dbms_random的參考文獻,鏈接為:http://www.psoug.org/reference/dbms_random.html 

Deprecated. Use the methods in the DBMS_CRYPTO built-in package,這個包已經不建議使用了 

附,dbms_random幾個參數的介紹: 
function value return number,返回一個[0,1)之間的隨機數,精度為38位(Gets a random number, greater than or equal to 0 and less than 1, with decimal 38 digits) 
function value(low IN NUMVBER,high IN NUMBER) return number,返回一個[low,high)之間的隨機數 
function normal return number,return random numbers in a standard normal distribution,返回服從正態分布的一組數,標準偏差為1,期望值為0,返回值中68%介于+1 和 -1 之間,95%介于 +2 和 -2 之間,99%介于+3 和 -3之間。 
function random return BINARY_INTEGER, (Generate Random Numeric Values), 
function string(opt char,length Number) return varchar2(the maximum is 60),返回一個指定長度的字符串( Create Random Strings),opt seed values: 
'a','A'&n 

問:我工作中的問題:主管讓我為了某個活動要隨機取出一些符合條件的EMAIL或者手機號碼用戶,來頒發獲獎通知或其它消息,我們公司用的Oracle 9i 請問這個如何實現?   
答:可以用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。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 美女女女女女女bbbbbb毛片 | 日本96在线精品视频免费观看 | 大桥未久midd—962在线 | 公交车上插入 | 添逼逼视频 | 成人无高清96免费 | x8x8在线观看免费 | 亚洲欧美精品一区天堂久久 | 日韩精品一区二区三区毛片 | 亚洲欧美日韩国产精品影院 | 日本一区二区三区四区无限 | 嫩模被黑人粗大挺进 | 天堂日韩 | 91九色porny国产美女一区 | 欧美国产合集在线视频 | 情趣内衣情趣玩具play | 韩国美女被的免费视频 | 天天躁天天碰天天看 | 国产精品每日在线观看男人的天堂 | 无码乱人伦一区二区亚洲 | 性生大片免费看 | 国产91精品露脸国语对白 | 国产99视频精品免视看9 | 免费看国产一级片 | 亚洲 欧美 国产 综合 播放 | 男人天堂网站在线 | 精品视频在线免费观看 | 国产一卡二卡3卡4卡四卡在线视频 | 日韩精品国产自在欧美 | 97在线资源站 | 免费国产高清精品一区在线 | 粗又长好猛好爽视频 | 99视频全部免费 | 小早川怜子视频在线观看 | www.青青草原 | 大伊香蕉精品视频一区 | 日韩国产成人资源精品视频 | 亚洲国产高清一区二区三区 | 美女秘密网站 | 金莲一级淫片aaaaaa | 国色天香社区视频在线观看免费完整版 |