Oracle DECODE无法正常工作

时间:2016-09-15 13:21:44

标签: sql oracle

我有一个oracle解码器,它在更新小数精度之前检查值是否为NULL。问题是当price_precision列中的值不为null时,解码仍然会转到d.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')))) price

我知道Price _Precision列中存在非NULL数据,因为我可以在select语句的返回中看到它。我的解码有问题吗?解码为什么没有进入默认语句?

2 个答案:

答案 0 :(得分:1)

似乎发生了隐式转换。考虑一下这个

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

来自Oracle docs

  

Oracle自动将expr和每个search值转换为。{   比较前第一个search值的数据类型。神谕   自动将返回值转换为与。相同的数据类型   第一个result

答案 1 :(得分:0)

对于Null值,请使用NVL函数。

从表中选择nvl(名称,“未注册”); 名称为空值时,返回“未注册”。

您可以将其与DECODE功能一起使用。

decode(nvl(PRICE,'无效'),'无效',0,PRICE)

在计算中,这避免了问题。

来自Oracle docs