Decode vs NVL功能有什么区别?

时间:2012-04-25 04:16:10

标签: sql oracle

我一直想知道如何为DECODE和NVL功能完成内部工作。 DECODE函数是否有更多的开销,以防其中的参数数量更多?

此外,即使原始值不为NULL,NVL函数是否会评估给定的值而不是NULL 例如对于NVL(COL1,func_call()) 即使COL1不是NULL,也会计算func_call()。在这种情况下,如果COL1很少为null并且func_call()非常耗时,则可能会产生性能问题。

提前致谢

1 个答案:

答案 0 :(得分:3)

NVL始终评估两个参数,因此即使COL1不为null,它也会评估func_call()

解码会发生短路,因此第一个有效条件会停止执行。

使用类似的参数,两者之间的表现非常相似。我通常只是根据简单性选择 - NVL,除非我需要一个if-then-else类型的构造。

---- ---- EDIT

如果您发现自己使用NVL,如nvl(col1,nvl(col2,'0')),那么在使用NVL的情况下,请查看coalesce函数,其中将表示为coalesce(col1,col2, '0') - 返回第一个非空参数