我正在努力维护其他人编写的一些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的低效方法。有人可以向我解释一下吗?
感谢您的任何见解!
答案 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
......