问题:自定义函数在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/
,如需转载,请注明出处,否则将追究法律责任。