SQL> create table a(val char(1));表已创建。SQL> insert into a values('a');已创建 1 行。SQL> insert into a values('b');已创建 1 行。SQL> insert into a values('c');已创建 1 行。SQL> commit;提交完成。SQL> select * from a;VA
--
a
b
cSQL> select * from (
2 select rownum rn,val from a)
3 where rn=round(dbms_random.value(1,rn)); RN VA
---------- --
1 aSQL> / RN VA
---------- --
1 a
3 cSQL> / RN VA
---------- --
1 a
2 bSQL> / RN VA
---------- --
1 a
2 bSQL> / RN VA
---------- --
1 a
为什么有时返回多个值?
--
a
b
cSQL> select * from (
2 select rownum rn,val from a)
3 where rn=round(dbms_random.value(1,rn)); RN VA
---------- --
1 aSQL> / RN VA
---------- --
1 a
3 cSQL> / RN VA
---------- --
1 a
2 bSQL> / RN VA
---------- --
1 a
2 bSQL> / RN VA
---------- --
1 a
为什么有时返回多个值?
解决方案 »
- Oracle两表关联,这问题怎么解决?(简单)
- MySql 重新安装出问题,查了各种资料都没法解决
- ORACLE索引的小问题
- 存储过程调用存储过程,怎么调,我急┄
- oracle中我要给每个表的主键都用上自动增长
- 再问 Oracle SQL 优化:为什么同一个字段 a.power >=1 & a.power <=9 加一头和2头都加上执行计划不同 ?
- 女友昨晚胃病难受,散分望保佑、祝福, 一切都好!!!###########
- 大家不觉得利用RowNum来分页速度很慢吗?尤其是数据量比较大的时候
- 关于pro*c中fetch到变量的问题
- 奇怪的问题,MINUS运算的结果和预想的不一致。
- 帮忙...谁帮给我一下函数~~~急
- oracle索引失效问题
因为这个select rownum rn,val from a 集合的数据是多行。
相当于遍历一下round(dbms_random.value(1,rn))
比如当rn=1的时候round(dbms_random.value(1,rn))就等于1所以第一行肯定取出
当rn=2的时候dbms_random.value(1,2)可能再1-1.5之间那么round(dbms_random.value(1,rn))就等于1了这个时候rn<>round(dbms_random.value(1,rn));
而dbms_random.value(1,2)可能为1.5-2这个时侯rn<>round(dbms_random.value(1,rn))
所以也可能出现第二行
同理也可能出现第三行。
select *
from (select val from aa
order by dbms_random.value)
where rownum = 1;
而round(dbms_random.value(1,rn));是一个随机条件,在外查询时,每条记录的where条件都有可能成立
或不成立即(成立1次、两次、三次),故查询结果会是一条、两条、三条不等。