3

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

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

提前致谢

4

1 回答 1

4

NVL 总是评估两个参数,所以即使 COL1 不为空,它也会评估 func_call()

解码确实短路,因此第一个有效条件停止执行。

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

- - 编辑 - -

在确实使用 NVL 的情况下,如果您发现自己在使用 nvl(col1, nvl(col2, '0')) 之类的嵌套 NVL,请查看 coalesce 函数,该函数将表示为 coalesce(col1, col2, '0' ) - 返回第一个非空参数

于 2012-04-25T04:47:38.507 回答