Ⅰ 如何在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以内的整数。