ITPub博客

首页 > Linux操作系统 > Linux操作系统 > ORACLE 自定义函数BUG?

ORACLE 自定义函数BUG?

原创 Linux操作系统 作者:wenhual43 时间:2012-06-21 14:35:57 0 删除 编辑
问题:自定义函数在where里面做判断的时候不一定生效。
今天有个SQL在where 条件里有个自定义函数,如下
select * from a where func(a.column)>0 and id=1, 执行后一条记录也没有。
func函数返回integer数值,我写成select  a.column ,func(a.column) from a where id=1,得到43行记录,其中 func(a.column) 的值有4个是1,其他的都是0,说明应该返回4行记录。这可能是oracle的一个bug。
我做了个测试。create table t as select  a.column ,func(a.column)as b  from a  where 1=0,desc看下表结构,b 是number类型,可能是number和自定义函数integer数据类型的精度不一致导致等于1的4行记录都没查出来。

另外,这种问题不一定出现,换个别的id号且func(a.column)>0,能查出正确结果,说明有些记录能查出来,有些查不出来。

解决办法
方法一:func重写为返回字符类型,func(a.column)>‘0 ’后能正确得到结果
方法二:func(a.column)<>0,查看函数,发现func(a.column)的值要么是0,要么是一个大于0的正整数。
    

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25027760/viewspace-733575/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-08-03

  • 博文量
    32
  • 访问量
    130411