Oracle SQL:这个DECODE语句有什么意义?

时间:2009-08-19 02:07:49

标签: sql oracle

我正在努力维护其他人编写的一些Oracle sql语句,而且我在大量语句和pl / sql块中重复看到这个相同的模式:

select DECODE(NVL(t1.some_column,'~'),'~',t2.some_column,t1.some_column) some_column from t1, t2 where ...

现在,这与这个更简单的陈述相同吗?

select NVL(t1.some_column,t2.some_column) from t1, t2 where...

我不确定为什么解码和nvl在原始查询中被链接。这似乎是一种单独执行nvl的低效方法。有人可以向我解释一下吗?

感谢您的任何见解!

1 个答案:

答案 0 :(得分:4)

哇,嗯,在那里看起来很糟糕。

NVL(t1.some_column, t2.some_column)

...给出相同的结果。

我对COALESCE感到更舒服,但是:

COALESCE(t1.some_column, t2.some_column)

这样,如果您想要添加第三个,那就是:

COALESCE(t1.some_column, t2.some_column, t3.some_column)

看来编写原始代码的人希望它是可扩展的,只是不知道COALESCE ......