两个“IF”块之间的差异

时间:2013-12-16 06:00:32

标签: oracle plsql

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

的价值如何

2 个答案:

答案 0 :(得分:3)

在您的特定情况下没有区别 - 两个区块会给您相同的结果。但是,IF构造是不同的,您应该注意操作数的值以及您在条件中使用的比较运算符,因为第一个else块的IF子句将捕获不符合IF条件的所有内容。在第二个IF块中,您更具体,只有在两个条件之一为真时才会更改no_revenue变量的值。

就性能而言,在这种特殊情况下完全摆脱IF块会更好,并按如下方式重写该逻辑:

no_revenue  := (total_sales <= 0);

答案 1 :(得分:0)

我认为#1更快,因为它不必在elseif中找到额外的“total_sales&gt; 0”的结果