2016-09-15 18 views
2

小数精度を更新する前に値がNULLかどうかをチェックするOracleデコードがあります。問題は、price_precision列の値がnullでない場合でも、デコードがd.price値に変わりますが、デフォルト値にする必要があります。私はselect文と引き換えにそれを見ることができるので、価格_Precision列内の非NULLデータが存在する事実を知っている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 

:ここではデコード用のコードの行があります。私のデコードに何か問題がありますか?デコードがデフォルトのステートメントに行かない理由は何ですか?

+0

d.priceはどのデータ型ですか? (デュアルUNION ALL SELECT NULLはPRICE_PRECISION、デュアルから '3' AS PRICE) DECODEを選択(d.PRICE_PRECISION、NULL、d.price、 TO_CHAR DECODE(d.price、NULL、 ''、d.price)、CONCAT( '9999990'、RPAD( 'D'、d.PRICE_PRECISION + 1、 '9'))))価格 からd; d.priceがvarchar2データの場合 – xQbert

答えて

1

暗黙的な変換が行われたようです。

Oracleが自動的に比較する前に、最初のsearch値の データ型にexpr、各search値を変換します。この

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

Oracle docsから考えてみましょうOracle は、戻り値を と同じデータ型に自動的に変換します。result

関連する問題