Ⅰ 如何在oracle資料庫中每次隨機查出記錄不同的n條記錄
既然是隨機,就很難保證是不重復,除非你每次查詢完後把查詢出來的更新掉狀態。
select * from (select * from table order by dbms_random.random)
where rownum < n
根據隨機規則排序,取前n個
但是會出現重復的
Ⅱ 在oracle中,如何從一張表中查詢一條隨機記錄
這幾天工作上的需要,要從一個比較大的表中隨機取出一條記錄,oracle 不像MS sqlSERVER那樣,直接用Select TOP 1 * From TABLE Order By NewID(),就能高效的隨機查出一條記錄。經過一翻折騰,用一個有90萬條記錄的表t_id,只有一個gameid欄位,該欄位上沒有索引,表裡就是從100000到999999一連串的數據記錄,進行測試:
方法1.
採用rownum和dbms_random.value,平均用時5秒,這個效率確實是太低了,對於小表應該還行,大表那就太不適合了。
declare
n_id number(6);
begin
SELECT gameid into n_id FROM(SELECT gameid FROM t_id T ORDER BY dbms_random.value()) WHERE ROWNUM=1;
dbms_output.put_line(to_char(n_id));
end;
/
方法2.
採用oracle sample語法,設置隨機樣本是1%,結果用時0.01左右,速度是相當快的,但是根據官網的說法,採用sample採集特性可能會產生不準確的結果集,我在測試中是沒有碰到不正確的結果。但是有個問題,就是隨機的結果分布很不平均,結果幾乎都分內存卡在100000-200000的記錄中。效率雖好,但並沒有達到很好的隨機效果,如果對於結果的要求不是很高的,這個方法是相當不錯的。
declare
n_id number(6);
begin
SELECT gameid into n_id FROM t_id SAMPLE (1) WHERE ROWNUM = 1;
dbms_output.put_line(to_char(n_id));
end;
/
方法3.
採用minus語法,先隨機獲取一個在表總記錄數范圍內的一個隨機數,再通過rownum查詢兩個結果集只相差一條記錄,用minus相減留出事先隨機數的那條記錄,平均用時大概1秒,隨機數越小,查詢速度越快,當隨機數是20000時,用於0.016秒。該方法雖然
能得到很有隨機效果,但效率比較不上該方法2. 對效率要求一般的話, 還是可以考慮使用的。
declare
n_count int:=0;
n_rand_num int:=0;
n_id number(6);
begin
SELECT COUNT(*) INTO n_count FROM t_id;
SELECT trunc(dbms_random.value(1,n_count+1)) INTO n_rand_num FROM DUAL;
select gameid into n_id from (SELECT gameid FROM t_id T WHERE rownum<n_rand_num
minus
SELECT gameid FROM t_id T WHERE rownum<n_rand_num-1);
dbms_output.put_line(to_char(n_id));
end;
/
Ⅲ oracle如何生成隨機數
select
to_char(sysdate,'yyyymmdd')||lpad(round(dbms_random.value(1,999999999)),9,0)
from
al;
解釋一下,to_char(sysdate,'yyyymmdd')是求得日期,也就是當前日期的年月日,||是連接符號
round(dbms_random.value(1,999999999)是取隨機數的整數位,round是四捨五入,從1-99999999之間取
lpad(9,0)是個左補0函數,如果選出的隨機數為1,則前邊就是8個0補充
Ⅳ orACLE產生隨機數的函數
產生一個介於指定范圍之內的38位精度的隨機數sql>
select
dbms_random.value(1,
9999)
from
al;
dbms_random.value(1,9999)-------------------------
4261.38448如果你是要一個
4位的整數
(也就是最小1000,
最大
9999)
select
trunc(
dbms_random.value(1000,
9999)
)
from
al;
Ⅳ oracle 命令設置值為隨機數的命令
先來100發
select round(dbms_random.value(50,59),0) random_value from al connect by rownum<=100;
RANDOM_VALUE
1 59
2 54
3 50
4 54
5 59
6 58
7 57
8 57
9 56
10 52
11 52
12 59
13 57
14 50
15 58
16 53
17 56
18 55
19 53
20 57
21 56
22 54
23 52
24 53
25 58
26 52
27 53
28 51
29 56
30 54
31 57
32 55
33 57
34 54
35 53
36 50
37 54
38 59
39 56
40 51
41 57
42 54
43 55
44 57
45 52
46 56
47 57
48 58
49 51
50 59
51 50
52 51
53 58
54 54
55 59
56 58
57 56
58 54
59 55
60 55
61 53
62 55
63 53
64 53
65 56
66 55
67 59
68 52
69 59
70 55
71 54
72 54
73 50
74 57
75 55
76 58
77 51
78 58
79 52
80 50
81 51
82 53
83 52
84 55
85 58
86 57
87 54
88 54
89 58
90 58
91 56
92 57
93 55
94 58
95 54
96 54
97 50
98 55
99 59
100 52
Ⅵ oracle 怎樣在指定數據當中生成隨機數
select trunc(dbms_random.value(1,4)) from al;
類似的你弄下就可以了 不懂問我
Ⅶ oracle資料庫,如何根據概率隨機查詢取四條數據呢
select * from tableName sample(10) where rownum<5;
sample(10)代表從tableName 表中隨機取到10%的數據 rownum<5 取4條
Ⅷ oracle把資料庫某個欄位更新為1-4隨機整數
update table1
set col1 = trunc(dbms_random.value(1,5))
Ⅸ [Oracle]從一個表中隨機取出6條記錄的sql語句
1、打開sql server 可視化工具。
Ⅹ Oracle資料庫中如何在某一列中插入sql生成的隨機數
insert into a(ID,姓名,性別) values (trunc(DBMS_RANDOM.value(1,100)),'小明','男');
commit;
----trunc(DBMS_RANDOM.value(1,100)) 隨機生成一個1~100以內的整數。