--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);