12
返回列表 发新帖
楼主: china_neo

[PL/SQL] SQL中是否加ORDER BY,一个函数结果会不同?

[复制链接]
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
11#
发表于 2005-1-25 20:32 | 只看该作者
最初由 china_neo 发布
[B]我这个问题有点和这个类似


select instr(OWNER,'SYS')AS INRULE,OWNER
from dba_objects
WHERE OWNER='SYS'

INRULE中结果只有1行是1(在PL/SQL Developer 中是100行),其他都是0
INRULE        OWNER
        1        SYS
        0        SYS
        0 SYS
        0        SYS
        0        SYS
        0        SYS
....



select instr(OWNER,'SYS')AS INRULE,OWNER
from dba_objects
WHERE OWNER='SYS'
order by Owner

则结果是这样的,INRULE 都是1
INRULE        OWNER
        1        SYS
        1        SYS
        1        SYS
        1        SYS
        1        SYS
        1        SYS
        1        SYS
......


各位为什么呀? [/B]




我的加不加order by结果都是1阿。

使用道具 举报

回复
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
12#
发表于 2005-1-25 21:26 | 只看该作者
我在 9204 中也是没什么问题的

所以需要核实是不是数据库版本的问题
如果相同版本其他环境不这样,则看是否是bug  

但是不论是否bug 或者 版本问题,通过修改sql先绕过问题再说

使用道具 举报

回复
论坛徽章:
0
13#
 楼主| 发表于 2005-1-25 22:13 | 只看该作者
select instr(OWNER,'SYS')AS INRULE,OWNER
from dba_objects
WHERE OWNER='SYS'
[ORDER BY]

我的版本也没有问题,结果也都是1

我是给大家举个例子,说我的函数和INSTR函数差不多,都是判断是否包含字符串的函数。

我觉得不管怎么样,一个函数只要参数没有变化,返回值一定是相同的

而结果是在调用函数的SQL中加了ORDER BY,和没加ORDER BY
返回值的结果是不一样的

我在9.2.0.1.0 中和9.0.1.1.1 中都这样

要不我把表和函数发上来让大家参考?

使用道具 举报

回复
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
14#
发表于 2005-1-26 09:48 | 只看该作者
最初由 china_neo 发布
[B]select instr(OWNER,'SYS')AS INRULE,OWNER
from dba_objects
WHERE OWNER='SYS'
[ORDER BY]

我的版本也没有问题,结果也都是1

我是给大家举个例子,说我的函数和INSTR函数差不多,都是判断是否包含字符串的函数。

我觉得不管怎么样,一个函数只要参数没有变化,返回值一定是相同的

而结果是在调用函数的SQL中加了ORDER BY,和没加ORDER BY
返回值的结果是不一样的

我在9.2.0.1.0 中和9.0.1.1.1 中都这样

要不我把表和函数发上来让大家参考? [/B]


如果所有版本都这样,使用 oracle 自己的函数就是正确的,自己编写的函数就不正确的话,那请你仔细读 oracle 的 pl/sql 程序设计 里面有关函数的几个几个问题,可能跟中文书上讲函数 纯度  等几个和编译特性结合在一起的东西有关系。几年没再读过这个东西忘记的差不多了,可能在 机械工业出版社出版的  pl/sql程序设计中能找到答案。希望你好运。

使用道具 举报

回复
论坛徽章:
2
2012新春纪念徽章
日期:2012-01-04 11:50:442013年新春福章
日期:2013-02-25 14:51:24
15#
发表于 2005-1-26 09:55 | 只看该作者
函数应该没有问题,我觉得问题是由于你的数据,你order的那一列是不是有可能有重复数据?

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表