日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle 随机获取N条数据

發布時間:2023/12/13 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle 随机获取N条数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Oracle 隨機獲取N條數據
??? 當我們獲取數據時,可能會有這樣的需求,即每次從表中獲取數據時,是隨機獲取一定的記錄,而不是每次都獲取一樣的數據,這時我們可以采取Oracle內部一些函數,來達到這樣的目的
1) select * from (select * from tablename order by sys_guid()) where rownum < N;
2) select * from (select * from tablename order by dbms_random.value) where rownum< N;
3) select *? from (select * from table_name sample(10)?? order by trunc(dbms_random.value(0, 1000)))? where rownum < N;

說明:
  sample(10)含義為檢索表中的10%數據,sample值應該在[0.000001,99.999999]之間,其中 sys_guid() 和 dbms_random.value都是內部函數,通過這樣的方法,就可以實現我們的需求了.

注:
  在使1)方法時,即使用sys_guid() 這種方法時,有時會獲取到相同的記錄,即和前一次查詢的結果集是一樣的,我查找了相關資料,有些說是和操作系統有關,在windows平臺下正常,獲取到的數據是隨機的,而在linux等平臺下始終是相同不變的數據集,有些說是因為sys_guid()函數本身的問題,即sys_guid()會在查詢上生成一個16字節的全局唯一標識符,這個標識符在絕大部分平臺上由一個宿主標識符和進程或進程的線程標識符組成,這就是說,它很可能是隨機的,但是并不表示一定是百分之百的這樣.
?????
  所以,為確保在不同的平臺每次讀取的數據都是隨機的,我們大多采用2)和3)兩種方案,其中2)方案更常用.3)方案縮小了查詢的范圍,在查詢大表,且要提取數據不是很不多的情況下,會對查詢速度上有一定的提高,

另:在Oracle中一般獲取隨機數的方法是:
select trunc(dbms_random.value(0, 1000)) from dual; (0-1000的整數)
select dbms_random.value(0, 1000) from dual; (0-1000的浮點數)

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/zhq1209/archive/2010/11/09/5997255.aspx

轉載于:https://www.cnblogs.com/emmy/archive/2011/01/12/1933733.html

總結

以上是生活随笔為你收集整理的Oracle 随机获取N条数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。