深入理解Oracle中的隨機函數


--Oracle中取隨機值的函數
1.dbms_random包
dbms_random包提供了一系列的隨機值獲取函數以及相關存儲過程。下面詳細講解常用的函數和過程。
(1)dbms_random.random:                               --返回[-2^31, 2^31)范圍內的整數隨機值
(2)dbms_random.value:                                --返回[0,1)精度最多為38 位的數字(返回小數)
   dbms_random.value (low in number,high in number): 返回為low<=result<high
(3)dbms_radnom.string(opt char,len number):          返回隨機字符串
    opt 是下列字符中的一個(長度只能是1):
    'u', 'U' – 返回字符串是大寫希臘字母
    'l', 'L' – 返回字符串是小寫希臘字母
    'a', 'A' – 返回字符串混合大小寫希臘字母
    'x', 'X' – 返回字符串混合大寫希臘字母和數字
    'p', 'P' –返回字符串是任何可打印字符串
     其他字母返回的是大寫希臘字母

2.sys_guid函數: 返回32 位的16 進制表示,raw類型
SQL> select sys_guid() from dual;
 
SYS_GUID()
--------------------------------
D0C3CDC75677446FAF9EC1C5C26A0236

對於raw類型,可以使用utl_raw包處理。
SQL> select utl_raw.cast_to_number(sys_guid()) from dual;
 
UTL_RAW.CAST_TO_NUMBER(SYS_GUI
------------------------------
           1.79662473137317E22
           
3.sample和sample block
(1)sample 按行的百分比來讀,對於大表比較快
   sample 就是讀全部,不加一樣sample(n),--n為[0.000001,100)當然讀的也不是嚴格的百分比,有一定的誤差。
(2)sample block:按表的塊來讀,按照塊數目掃描
   sample block中的sample不可加值,block必須加值,和單獨的sample不同
   sample block(n), --n為[0.000001,100)

測試:
create table test as select * from all_objects;

select * from ( select * from test sample(50)) where rownum != 10;
select * from ( select * from test sample block(50) ) where rownum != 10;

有兩條數據,任意刪除一條
drop table test;
create table test(a number,b number);
insert into test values(1,2);
insert into test values(2,1);
delete from test where (a,b)=(select a,b from (select a,b from test order by dbms_random.value) where rownum<2);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM