两个“IF”块之间的区别
Posted
技术标签:
【中文标题】两个“IF”块之间的区别【英文标题】:Difference between two "IF" blocks 【发布时间】:2013-12-16 06:00:31 【问题描述】:1)
DECLARE
total_sales number := 10;
no_revenue BOOLEAN;
BEGIN
IF total_sales <= 0 THEN
no_revenue := TRUE;
ELSE
no_revenue := FALSE;
END IF;
END;
2)
DECLARE
total_sales number := 10;
no_revenue BOOLEAN;
BEGIN
IF total_sales <= 0 THEN
no_revenue := TRUE;
ELSIF total_sales > 0 THEN
no_revenue := FALSE;
END IF;
END;
在性能方面哪个更好?为什么?
PS。与total_sales
的值无关
【问题讨论】:
你的块在语义上是不同的,因为如果total_sales
为空,第二个块不会分配no_revenue
。
【参考方案1】:
在您的特定情况下没有区别 - 两个块会给您相同的结果。但是,IF
构造是不同的,您应该注意操作数的值以及您在条件中使用的比较运算符,因为第一个 IF
块的 else
子句将捕获所有不符合IF
条件。在第二个 IF
块中,您更加具体,只有当两个条件之一为真时,no_revenue
变量的值才会更改。
在性能方面,最好完全摆脱 IF
块,在这种特殊情况下并重写该逻辑如下:
no_revenue := (total_sales <= 0);
【讨论】:
【参考方案2】:我会说#1 更快,因为它不必在 elseif 中找到额外的“total_sales > 0”的结果
【讨论】:
【参考方案3】:我相信在第一个中,如果 total_sales 为 NULL no_revenue 将为 false,在第二个中代码会中断,因为在任何 IF 之间都找不到 NULL。
【讨论】:
正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。以上是关于两个“IF”块之间的区别的主要内容,如果未能解决你的问题,请参考以下文章