2016-09-15 57 views
2

我有一個oracle解碼器,它在更新小數精度之前檢查值是否爲NULL。問題是,當price_precision列中的值不爲空時,解碼仍會轉到d.price值,但應該轉到默認值。下面是代碼解碼行:Oracle DECODE不工作

DECODE(d.PRICE_PRECISION, NULL, d.price,TO_CHAR(DECODE(d.price,NULL, '', d.price), CONCAT('9999990',RPAD('D', d.PRICE_PRECISION+1,'9')))) price 

我知道的一個事實存在的價格_Precision列的非NULL數據,因爲我可以在返回的select語句看到它。我的解碼器有問題嗎?任何想法爲什麼解碼不會去默認語句?

+0

什麼數據類型是d.price? 'WITH D AS(SELECT 10 AS PRICE_PRECISION,'2'as dual from UNION ALL SELECT NULL AS PRICE_PRECISION,'3'as Price from dual) 選擇DECODE(d.PRICE_PRECISION,NULL,d.price, TO_CHAR DECODE(d.price,NULL,'',d.price),CONCAT('9999990',RPAD('D',d.PRICE_PRECISION + 1,'9'))))價格 from d;'似乎工作如果d.price是varchar2數據。 – xQbert

回答

1

它似乎發生了隱式轉換。考慮這個

DECODE(d.PRICE_PRECISION, NULL, to_char(d.price), TO_CHAR.... 

Oracle docs

甲骨文自動轉換expr每個search價值的 數據類型的第一search值的比較之前。 Oracle 會自動將返回值轉換爲與 第一個result相同的數據類型。