我一直想知道 DECODE 和 NVL 功能的内部工作是如何完成的。如果 DECODE 函数中的参数数量更多,它是否有更多开销?
此外,NVL 函数是否评估给定的值而不是 NULL,即使原始值不是 NULL,例如对于 NVL(COL1, func_call()),即使 COL1 不是 NULL,也会计算 func_call()。在这种情况下,如果 COL1 很少为 null 并且 func_call() 很耗时,则可能会产生性能问题。
提前致谢
NVL 总是评估两个参数,所以即使 COL1 不为空,它也会评估 func_call()
解码确实短路,因此第一个有效条件停止执行。
使用类似的论点,两者之间的性能非常相似。我通常只是根据简单性来选择 - NVL,除非我需要一个 if-then-else 类型的构造。
- - 编辑 - -
在确实使用 NVL 的情况下,如果您发现自己在使用 nvl(col1, nvl(col2, '0')) 之类的嵌套 NVL,请查看 coalesce 函数,该函数将表示为 coalesce(col1, col2, '0' ) - 返回第一个非空参数