oracle dbms_random.value 问题

flalscjf 2011-12-12 07:29:02

 
select * from (
select decode (level, 2, 80, 75) xx, round(dbms_random.value(1,100)) qq from dual
connect by level <= 10) where xx >= qq


执行上面的SQL以后会出现
xx qq
80 20
75 46
75 42
75 60
75 51
75 98
75 76
75 92

这样的结果。

下面这两个数据是怎么来的呢?
75 98

75 92

请各位高手教我。 这里先谢谢大家了
...全文
299 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
q806294478 2012-07-05
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]
SQL> select * from (
select decode (level, 2, 80, 75) xx, round(dbms_random.value(1,100)) qq from dual
connect by level <= 10) where xx >= qq 2 3 ;

XX QQ
---------- ----------
75 3
80 ……
[/Quote]
查询语句最后面的23是神马意思?
面无表情 2012-07-05
  • 打赏
  • 举报
回复
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
面无表情 2012-07-05
  • 打赏
  • 举报
回复
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
面无表情 2012-07-05
  • 打赏
  • 举报
回复
SQL> select * from (
select decode (level, 2, 80, 75) xx, round(dbms_random.value(1,100)) qq from dual
connect by level <= 10) where xx >= qq 2 3 ;

XX QQ
---------- ----------
75 3
80 64
75 10
75 42
75 71
75 66
75 63
75 44

8 rows selected.
q806294478 2012-07-04
  • 打赏
  • 举报
回复
我测试的也存在这样的问题,基本上每次都会出现qq>xx的情况。等解决。
minitoy 2011-12-13
  • 打赏
  • 举报
回复
操作问题吧。
你直接把整条语句选择后再执行,保证不会出这问题。
如果是让工具自己识别整条语句,有时候会取不全,有可能遗漏后面的xx>qq
flalscjf 2011-12-13
  • 打赏
  • 举报
回复
崩溃了, 难道不同的版本显示的不一样?
我心飞翔 2011-12-12
  • 打赏
  • 举报
回复
实测结果:Oracle 11g R2


执行了很多次,不会出现不符合要求的记录。
xpingping 2011-12-12
  • 打赏
  • 举报
回复
怎么筛选出来的呀?不是 xx >= qq,不可能的事呀!!!

xiaobn_cn 2011-12-12
  • 打赏
  • 举报
回复
是的,我执行了很多次,qq > xx的记录都被过滤掉了,每次执行得到的结果集的行数也不相同,有时是7条,有时是5条。
flalscjf 2011-12-12
  • 打赏
  • 举报
回复
多执行几次也不会出现吗?

我是在家执行了好几次才出来的。qq 值比 xx值大,但结果集里还会显示。
xiaobn_cn 2011-12-12
  • 打赏
  • 举报
回复
完全复制楼主的SQL在我的数据库上执行没有楼主所有说的问题,所得的结果集严格遵循了xx >= qq的条件,不符合该条件的记录不在结果集中。使用的数据库为oracle 10gSQL本身没有问题,建议楼主更换其它数据库再测试一下。
flalscjf 2011-12-12
  • 打赏
  • 举报
回复
就像上面说的一样,加了。
我最奇怪的是有 where xx >= qq 条件以后
结果集里为什么出现
75 98
75 92
这两行数据。 数据库版本是 10.2.0
dws2004 2011-12-12
  • 打赏
  • 举报
回复
随机函数能产生1-100之间的数据
估计你执行的时候 没有加上where xx >= qq 这个条件吧



flalscjf 2011-12-12
  • 打赏
  • 举报
回复
我也纳闷啊, 回到家测试。还是出现上面的问题。
xx qq
75 98
80 4
75 98
75 4

搞不懂 98 这一行怎么出来的。

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production

是不是跟我的配置有关系啊?

求解。。。。。。。。

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧