ORACLE 自定義函式BUG?

wenhual43發表於2012-06-21
問題:自定義函式在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部落格 ” ,連結:http://blog.itpub.net/25027760/viewspace-733575/,如需轉載,請註明出處,否則將追究法律責任。

相關文章