ITPUB??ì3
2010数据库技术大会
ITPUB论坛 » Oracle数据库管理 » order by sys_guid() 不生效


您有 1 条公共消息
  • 来自: 公共消息 标题: 3-5月ITPUB数据库 ... 内容: ITPUB与3月和5月分别安排了Oracle 11g DBA和Oracle性能优化培训,以及 ...

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


    精华贴数 0
    个人空间 0
    技术积分 1854 (1106)
    社区积分 362 (2113)
    注册日期 2005-4-6
    论坛徽章:7
    ITPUB元老参与2007年甲骨文全球大会(中国上海)纪念会员2007贡献徽章CTO参与奖授权会员2010新春纪念徽章
    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;



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


    只看该作者    顶部
    离线 liangmin11
    资深会员


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

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


    只看该作者    顶部
    离线 Kamus
    版主


    精华贴数 52
    个人空间 400
    技术积分 47987 (18)
    社区积分 3610 (503)
    注册日期 2002-5-26
    论坛徽章:49
    现任管理团队成员2007年度ITPUB最佳技术原创精华ITPUB元老ITPUB北京九华山庄2008年会纪念徽章管理团队2007贡献徽章参与2007年甲骨文全球大会(中国上海)纪念
    ITPUB北京香山2007年会纪念徽章管理团队2006纪念徽章会员2007贡献徽章会员2006贡献徽章蓝色妖姬紫蜘蛛

    发表于 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
    技术积分 1854 (1106)
    社区积分 362 (2113)
    注册日期 2005-4-6
    论坛徽章:7
    ITPUB元老参与2007年甲骨文全球大会(中国上海)纪念会员2007贡献徽章CTO参与奖授权会员2010新春纪念徽章
    ITPUB新首页上线纪念徽章     

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


    只看该作者    顶部
    离线 liangmin11
    资深会员


    精华贴数 0
    个人空间 0
    技术积分 1854 (1106)
    社区积分 362 (2113)
    注册日期 2005-4-6
    论坛徽章:7
    ITPUB元老参与2007年甲骨文全球大会(中国上海)纪念会员2007贡献徽章CTO参与奖授权会员2010新春纪念徽章
    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

    如上语句确实有效


    只看该作者    顶部
    离线 Kamus
    版主


    精华贴数 52
    个人空间 400
    技术积分 47987 (18)
    社区积分 3610 (503)
    注册日期 2002-5-26
    论坛徽章:49
    现任管理团队成员2007年度ITPUB最佳技术原创精华ITPUB元老ITPUB北京九华山庄2008年会纪念徽章管理团队2007贡献徽章参与2007年甲骨文全球大会(中国上海)纪念
    ITPUB北京香山2007年会纪念徽章管理团队2006纪念徽章会员2007贡献徽章会员2006贡献徽章蓝色妖姬紫蜘蛛

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


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

    ***Chanel [K]***



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


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

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


    只看该作者    顶部
    离线 Kamus
    版主


    精华贴数 52
    个人空间 400
    技术积分 47987 (18)
    社区积分 3610 (503)
    注册日期 2002-5-26
    论坛徽章:49
    现任管理团队成员2007年度ITPUB最佳技术原创精华ITPUB元老ITPUB北京九华山庄2008年会纪念徽章管理团队2007贡献徽章参与2007年甲骨文全球大会(中国上海)纪念
    ITPUB北京香山2007年会纪念徽章管理团队2006纪念徽章会员2007贡献徽章会员2006贡献徽章蓝色妖姬紫蜘蛛

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


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

    ***Chanel [K]***



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


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

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


    只看该作者    顶部
    离线 Kamus
    版主


    精华贴数 52
    个人空间 400
    技术积分 47987 (18)
    社区积分 3610 (503)
    注册日期 2002-5-26
    论坛徽章:49
    现任管理团队成员2007年度ITPUB最佳技术原创精华ITPUB元老ITPUB北京九华山庄2008年会纪念徽章管理团队2007贡献徽章参与2007年甲骨文全球大会(中国上海)纪念
    ITPUB北京香山2007年会纪念徽章管理团队2006纪念徽章会员2007贡献徽章会员2006贡献徽章蓝色妖姬紫蜘蛛

    发表于 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证:060528号 联系我们