ITPUB??ì3
12月微软Hyper-V虚拟化沙龙主题征集
ITPUB论坛 » Oracle数据库管理 » order by sys_guid() 不生效

标题: order by sys_guid() 不生效
离线 liangmin11
资深会员


精华贴数 0
个人空间 0
技术积分 1666 (1029)
社区积分 300 (1949)
注册日期 2005-4-6
论坛徽章:5
ITPUB元老参与2007年甲骨文全球大会(中国上海)纪念会员2007贡献徽章授权会员ITPUB新首页上线纪念徽章 
      

发表于 2008-8-29 11:45 
order by sys_guid() 不生效

RHEL4.5 + 10.2.0.2

select * from (select * from user_objects order by sys_guid()) where rownum<3;

语句不管用, 并不随机生成数据,  经过几个RHEL4.5+10.2.0.2的环境测试, 都是不生效, 但是在windwos系统下确实是管用的,

经过测试, 在我的环境下如下的方法是有用的!

select * from (select * from user_objects  order by dbms_random.value) where rownum<3;



各位高手谁给解释一下, 这是为什么呢?


__________________
专业的ORACLE提问网, 中国的ASKTOM,  www.askoracle.com.cn
只看该作者    顶部
离线 liangmin11
资深会员


精华贴数 0
个人空间 0
技术积分 1666 (1029)
社区积分 300 (1949)
注册日期 2005-4-6
论坛徽章:5
ITPUB元老参与2007年甲骨文全球大会(中国上海)纪念会员2007贡献徽章授权会员ITPUB新首页上线纪念徽章 
      

发表于 2008-8-29 13:01 
高手给看看


__________________
专业的ORACLE提问网, 中国的ASKTOM,  www.askoracle.com.cn
只看该作者    顶部
离线 Kamus
版主


精华贴数 51
个人空间 400
技术积分 46804 (13)
社区积分 3565 (391)
注册日期 2002-5-26
论坛徽章:30
现任管理团队成员2007年度ITPUB最佳技术原创精华ITPUB元老ITPUB北京九华山庄2008年会纪念徽章管理团队2007贡献徽章参与2007年甲骨文全球大会(中国上海)纪念
ITPUB北京香山2007年会纪念徽章管理团队2006纪念徽章会员2007贡献徽章会员2006贡献徽章授权会员2008北京奥运纪念徽章:跳水

发表于 2008-8-29 14:25 
有趣的问题。我倒是有些诧异为什么order by sys_guid()或者order by dbms_random.value会有效。

select object_name from (select * from user_objects order by sys_guid()) where rownum<3;
select * from (select * from user_objects  order by dbms_random.value) where rownum<3;

这两句确实都嫩正常运行,但是如果将sys_guid()或者dbms_random.value的值填入这个SQL,那肯定就报错了。所以分析的话还是应该从access path处入手吧。


__________________
有事情请发Gmail邮箱,站内IM可能不能及时回复。    

***Chanel [K]***

从明天起, 做一个幸福的人  
喂马, 劈柴, 周游世界  
从明天起, 关心粮食和蔬菜  
我有一所房子 面朝大海, 春暖花开
只看该作者    顶部
离线 liangmin11
资深会员


精华贴数 0
个人空间 0
技术积分 1666 (1029)
社区积分 300 (1949)
注册日期 2005-4-6
论坛徽章:5
ITPUB元老参与2007年甲骨文全球大会(中国上海)纪念会员2007贡献徽章授权会员ITPUB新首页上线纪念徽章 
      

发表于 2008-8-29 14:28 
order by dbms_random.value 确实是有效的, 目前通过测试, 在应用里上线正常使用了!   order by sys_guid()我在之前的其他系统上也是使用正常的, 这次在RHEL4.5 10.2.0.2的系统就不行了!


__________________
专业的ORACLE提问网, 中国的ASKTOM,  www.askoracle.com.cn
只看该作者    顶部
离线 liangmin11
资深会员


精华贴数 0
个人空间 0
技术积分 1666 (1029)
社区积分 300 (1949)
注册日期 2005-4-6
论坛徽章:5
ITPUB元老参与2007年甲骨文全球大会(中国上海)纪念会员2007贡献徽章授权会员ITPUB新首页上线纪念徽章 
      

发表于 2008-8-29 14:29 


select b.id,b.login_name,b.gender,b.age from
(select * from (
select id
  from  t
where t.gender = 1
   and t.age = 22
   and t.status = 1
order by dbms_random.value) where rownum <=30 ) a,
b
where a.id=b.id

如上语句确实有效


__________________
专业的ORACLE提问网, 中国的ASKTOM,  www.askoracle.com.cn
只看该作者    顶部
离线 Kamus
版主


精华贴数 51
个人空间 400
技术积分 46804 (13)
社区积分 3565 (391)
注册日期 2002-5-26
论坛徽章:30
现任管理团队成员2007年度ITPUB最佳技术原创精华ITPUB元老ITPUB北京九华山庄2008年会纪念徽章管理团队2007贡献徽章参与2007年甲骨文全球大会(中国上海)纪念
ITPUB北京香山2007年会纪念徽章管理团队2006纪念徽章会员2007贡献徽章会员2006贡献徽章授权会员2008北京奥运纪念徽章:跳水

发表于 2008-8-29 14:31 
你说的order by sys_guid()在RH上无效了,是报错,还是一直都是返回同样的记录?


__________________
有事情请发Gmail邮箱,站内IM可能不能及时回复。    

***Chanel [K]***

从明天起, 做一个幸福的人  
喂马, 劈柴, 周游世界  
从明天起, 关心粮食和蔬菜  
我有一所房子 面朝大海, 春暖花开
只看该作者    顶部
离线 liangmin11
资深会员


精华贴数 0
个人空间 0
技术积分 1666 (1029)
社区积分 300 (1949)
注册日期 2005-4-6
论坛徽章:5
ITPUB元老参与2007年甲骨文全球大会(中国上海)纪念会员2007贡献徽章授权会员ITPUB新首页上线纪念徽章 
      

发表于 2008-8-29 14:36 
可以运行, 但是一直返回同样记录!


__________________
专业的ORACLE提问网, 中国的ASKTOM,  www.askoracle.com.cn
只看该作者    顶部
离线 Kamus
版主


精华贴数 51
个人空间 400
技术积分 46804 (13)
社区积分 3565 (391)
注册日期 2002-5-26
论坛徽章:30
现任管理团队成员2007年度ITPUB最佳技术原创精华ITPUB元老ITPUB北京九华山庄2008年会纪念徽章管理团队2007贡献徽章参与2007年甲骨文全球大会(中国上海)纪念
ITPUB北京香山2007年会纪念徽章管理团队2006纪念徽章会员2007贡献徽章会员2006贡献徽章授权会员2008北京奥运纪念徽章:跳水

发表于 2008-8-29 14:47 
我刚才在Oracle XE 10.2.0.1 for Unbrealable Linux上也验证了,确实如你所说,始终返回同样的结果集。
我会发一封邮件去问一下,应该是不同平台对于sys_guid()实现方法不用导致的。


__________________
有事情请发Gmail邮箱,站内IM可能不能及时回复。    

***Chanel [K]***

从明天起, 做一个幸福的人  
喂马, 劈柴, 周游世界  
从明天起, 关心粮食和蔬菜  
我有一所房子 面朝大海, 春暖花开
只看该作者    顶部
离线 liangmin11
资深会员


精华贴数 0
个人空间 0
技术积分 1666 (1029)
社区积分 300 (1949)
注册日期 2005-4-6
论坛徽章:5
ITPUB元老参与2007年甲骨文全球大会(中国上海)纪念会员2007贡献徽章授权会员ITPUB新首页上线纪念徽章 
      

发表于 2008-8-29 14:54 
呵呵  感谢版主的帮助了!  等你的消息了.   谢谢


__________________
专业的ORACLE提问网, 中国的ASKTOM,  www.askoracle.com.cn
只看该作者    顶部
离线 Kamus
版主


精华贴数 51
个人空间 400
技术积分 46804 (13)
社区积分 3565 (391)
注册日期 2002-5-26
论坛徽章:30
现任管理团队成员2007年度ITPUB最佳技术原创精华ITPUB元老ITPUB北京九华山庄2008年会纪念徽章管理团队2007贡献徽章参与2007年甲骨文全球大会(中国上海)纪念
ITPUB北京香山2007年会纪念徽章管理团队2006纪念徽章会员2007贡献徽章会员2006贡献徽章授权会员2008北京奥运纪念徽章:跳水

发表于 2008-8-29 16:27 
还没有回信,但是我比较了一下linux上和windows上的sys_guid()。

在linux和windows的oracle中分别执行:select sys_guid() from dual;

可以看到多次执行的结果,在windows中是变化的,但是在linux中始终是一样的,这是为什么在linux中不能用sys_guid(0来返回random结果集的原因。


__________________
有事情请发Gmail邮箱,站内IM可能不能及时回复。    

***Chanel [K]***

从明天起, 做一个幸福的人  
喂马, 劈柴, 周游世界  
从明天起, 关心粮食和蔬菜  
我有一所房子 面朝大海, 春暖花开
只看该作者    顶部
相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问