ITPUB论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
更多
查看: 4357|回复: 17

order by sys_guid() 不生效 [复制链接]

注册会员

资深会员

精华贴数
0
技术积分
1954
社区积分
378
注册时间
2005-4-6
论坛徽章:
9
授权会员
日期:2006-05-27 13:42:05参与2007年甲骨文全球大会(中国上海)纪念
日期:2007-08-20 19:43:08会员2007贡献徽章
日期:2007-09-26 18:42:10ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44ITPUB元老
日期:2008-10-31 12:59:35CTO参与奖
日期:2009-02-12 11:45:482010新春纪念徽章
日期:2010-03-01 11:20:522011新春纪念徽章
日期:2011-02-18 11:42:472011新春纪念徽章
日期:2011-05-06 13:11:27
发表于 2008-8-29 11:45:11 |显示全部楼层
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;



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

注册会员

资深会员

精华贴数
0
技术积分
1954
社区积分
378
注册时间
2005-4-6
论坛徽章:
9
授权会员
日期:2006-05-27 13:42:05参与2007年甲骨文全球大会(中国上海)纪念
日期:2007-08-20 19:43:08会员2007贡献徽章
日期:2007-09-26 18:42:10ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44ITPUB元老
日期:2008-10-31 12:59:35CTO参与奖
日期:2009-02-12 11:45:482010新春纪念徽章
日期:2010-03-01 11:20:522011新春纪念徽章
日期:2011-02-18 11:42:472011新春纪念徽章
日期:2011-05-06 13:11:27
发表于 2008-8-29 13:01:32 |显示全部楼层
高手给看看

使用道具 举报

版主

版主

精华贴数
57
技术积分
51675
社区积分
3819
注册时间
2002-5-26
论坛徽章:
70
授权会员
日期:2005-10-30 17:05:33ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41ITPUB官方微博粉丝徽章
日期:2011-06-28 19:45:36复活蛋
日期:2011-05-31 16:00:07现任管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:41:01ITPUB技术丛书作者
日期:2010-09-26 15:24:56月度精华徽章
日期:2010-06-01 02:15:562010新春纪念徽章
日期:2010-03-01 11:19:502007年度ITPUB最佳技术原创精华
日期:2008-04-03 16:46:48管理团队2007贡献徽章
日期:2007-09-26 00:03:14参与2007年甲骨文全球大会(中国上海)纪念
日期:2007-08-06 15:19:01
发表于 2008-8-29 14:25:16 |显示全部楼层
有趣的问题。我倒是有些诧异为什么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]***ACOUG***ACOUG Forum***

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


使用道具 举报

注册会员

资深会员

精华贴数
0
技术积分
1954
社区积分
378
注册时间
2005-4-6
论坛徽章:
9
授权会员
日期:2006-05-27 13:42:05参与2007年甲骨文全球大会(中国上海)纪念
日期:2007-08-20 19:43:08会员2007贡献徽章
日期:2007-09-26 18:42:10ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44ITPUB元老
日期:2008-10-31 12:59:35CTO参与奖
日期:2009-02-12 11:45:482010新春纪念徽章
日期:2010-03-01 11:20:522011新春纪念徽章
日期:2011-02-18 11:42:472011新春纪念徽章
日期:2011-05-06 13:11:27
发表于 2008-8-29 14:28:18 |显示全部楼层
order by dbms_random.value 确实是有效的, 目前通过测试, 在应用里上线正常使用了!   order by sys_guid()我在之前的其他系统上也是使用正常的, 这次在RHEL4.5 10.2.0.2的系统就不行了!

使用道具 举报

注册会员

资深会员

精华贴数
0
技术积分
1954
社区积分
378
注册时间
2005-4-6
论坛徽章:
9
授权会员
日期:2006-05-27 13:42:05参与2007年甲骨文全球大会(中国上海)纪念
日期:2007-08-20 19:43:08会员2007贡献徽章
日期:2007-09-26 18:42:10ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44ITPUB元老
日期:2008-10-31 12:59:35CTO参与奖
日期:2009-02-12 11:45:482010新春纪念徽章
日期:2010-03-01 11:20:522011新春纪念徽章
日期:2011-02-18 11:42:472011新春纪念徽章
日期:2011-05-06 13:11:27
发表于 2008-8-29 14:29:51 |显示全部楼层
  1. select b.id,b.login_name,b.gender,b.age from
  2. (select * from (
  3. select id
  4.   from  t
  5. where t.gender = 1
  6.    and t.age = 22
  7.    and t.status = 1
  8. order by dbms_random.value) where rownum <=30 ) a,
  9. b
  10. where a.id=b.id
复制代码



如上语句确实有效

使用道具 举报

版主

版主

精华贴数
57
技术积分
51675
社区积分
3819
注册时间
2002-5-26
论坛徽章:
70
授权会员
日期:2005-10-30 17:05:33ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41ITPUB官方微博粉丝徽章
日期:2011-06-28 19:45:36复活蛋
日期:2011-05-31 16:00:07现任管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:41:01ITPUB技术丛书作者
日期:2010-09-26 15:24:56月度精华徽章
日期:2010-06-01 02:15:562010新春纪念徽章
日期:2010-03-01 11:19:502007年度ITPUB最佳技术原创精华
日期:2008-04-03 16:46:48管理团队2007贡献徽章
日期:2007-09-26 00:03:14参与2007年甲骨文全球大会(中国上海)纪念
日期:2007-08-06 15:19:01
发表于 2008-8-29 14:31:51 |显示全部楼层
你说的order by sys_guid()在RH上无效了,是报错,还是一直都是返回同样的记录?
有事情请发Gmail邮箱,站内IM可能不能及时回复。    

***Chanel [K]***ACOUG***ACOUG Forum***

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


使用道具 举报

注册会员

资深会员

精华贴数
0
技术积分
1954
社区积分
378
注册时间
2005-4-6
论坛徽章:
9
授权会员
日期:2006-05-27 13:42:05参与2007年甲骨文全球大会(中国上海)纪念
日期:2007-08-20 19:43:08会员2007贡献徽章
日期:2007-09-26 18:42:10ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44ITPUB元老
日期:2008-10-31 12:59:35CTO参与奖
日期:2009-02-12 11:45:482010新春纪念徽章
日期:2010-03-01 11:20:522011新春纪念徽章
日期:2011-02-18 11:42:472011新春纪念徽章
日期:2011-05-06 13:11:27
发表于 2008-8-29 14:36:19 |显示全部楼层
可以运行, 但是一直返回同样记录!

使用道具 举报

版主

版主

精华贴数
57
技术积分
51675
社区积分
3819
注册时间
2002-5-26
论坛徽章:
70
授权会员
日期:2005-10-30 17:05:33ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41ITPUB官方微博粉丝徽章
日期:2011-06-28 19:45:36复活蛋
日期:2011-05-31 16:00:07现任管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:41:01ITPUB技术丛书作者
日期:2010-09-26 15:24:56月度精华徽章
日期:2010-06-01 02:15:562010新春纪念徽章
日期:2010-03-01 11:19:502007年度ITPUB最佳技术原创精华
日期:2008-04-03 16:46:48管理团队2007贡献徽章
日期:2007-09-26 00:03:14参与2007年甲骨文全球大会(中国上海)纪念
日期:2007-08-06 15:19:01
发表于 2008-8-29 14:47:29 |显示全部楼层
我刚才在Oracle XE 10.2.0.1 for Unbrealable Linux上也验证了,确实如你所说,始终返回同样的结果集。
我会发一封邮件去问一下,应该是不同平台对于sys_guid()实现方法不用导致的。
有事情请发Gmail邮箱,站内IM可能不能及时回复。    

***Chanel [K]***ACOUG***ACOUG Forum***

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


使用道具 举报

注册会员

资深会员

精华贴数
0
技术积分
1954
社区积分
378
注册时间
2005-4-6
论坛徽章:
9
授权会员
日期:2006-05-27 13:42:05参与2007年甲骨文全球大会(中国上海)纪念
日期:2007-08-20 19:43:08会员2007贡献徽章
日期:2007-09-26 18:42:10ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44ITPUB元老
日期:2008-10-31 12:59:35CTO参与奖
日期:2009-02-12 11:45:482010新春纪念徽章
日期:2010-03-01 11:20:522011新春纪念徽章
日期:2011-02-18 11:42:472011新春纪念徽章
日期:2011-05-06 13:11:27
发表于 2008-8-29 14:54:00 |显示全部楼层
呵呵  感谢版主的帮助了!  等你的消息了.   谢谢

使用道具 举报

版主

版主

精华贴数
57
技术积分
51675
社区积分
3819
注册时间
2002-5-26
论坛徽章:
70
授权会员
日期:2005-10-30 17:05:33ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41ITPUB官方微博粉丝徽章
日期:2011-06-28 19:45:36复活蛋
日期:2011-05-31 16:00:07现任管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:41:01ITPUB技术丛书作者
日期:2010-09-26 15:24:56月度精华徽章
日期:2010-06-01 02:15:562010新春纪念徽章
日期:2010-03-01 11:19:502007年度ITPUB最佳技术原创精华
日期:2008-04-03 16:46:48管理团队2007贡献徽章
日期:2007-09-26 00:03:14参与2007年甲骨文全球大会(中国上海)纪念
日期:2007-08-06 15:19:01
发表于 2008-8-29 16:27:10 |显示全部楼层
还没有回信,但是我比较了一下linux上和windows上的sys_guid()。

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

可以看到多次执行的结果,在windows中是变化的,但是在linux中始终是一样的,这是为什么在linux中不能用sys_guid(0来返回random结果集的原因。
有事情请发Gmail邮箱,站内IM可能不能及时回复。    

***Chanel [K]***ACOUG***ACOUG Forum***

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


使用道具 举报

相关内容推荐
您需要登录后才可以回帖 登录 | 注册

TOP技术积分榜 社区积分榜 徽章 电子杂志 团队 统计 邮箱 虎吧 老博客 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 | IT博客
CopyRight 1999-2011 itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001 广播电视节目制作经营许可证:编号(京)字第1149号
  
回顶部