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实例startup 时出错
- 求教大神:解决Oracle的监听问题!
- 存储过程的问题(急,在线等)
- Blob对象的处理
- 如何在select语句中让输出的日期格式为 YYYY年MM月DD日 ? 比如 2006年07月21日
- 创建用户的时候给了unlimited tablespace权限
- 大数据量,两表比较操作性能!
- 如何卸掉win2000控制面板-管理工具-服务列表中oracle各种服务
- 请问高人如果在存储过程中======>往文本文件中写入信息,如:有格式的信息或表格
- Ora-00942:表或视图不存在,哪位大神帮忙解决下,谢了!
- 帮忙...谁帮给我一下函数~~~急
- 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次、两次、三次),故查询结果会是一条、两条、三条不等。