嵌套 IF 在 PL/SQL

NESTED IF's in PL/SQL

我正在尝试在 pl/sql 块中编写嵌套的 IF。怎么安排才合适。

IF r1.CABLE_TYPE = "A" THEN
var_root = FC_CPSCBPR1.C_111_SCPSCBP

我现在必须包含逻辑

If var_root is "TRUE" /*If the value is populated*/
  THEN 
       IF ...
            THEN
Elsif var_root is "FALSE" /*If the value is not found*/

      THEN

查看 this example 了解嵌套的 IF 语句。
每个都需要一个 END IF 来结束。

DECLARE
  PROCEDURE p (
    sales  NUMBER,
    quota  NUMBER,
    emp_id NUMBER
  )
  IS
    bonus  NUMBER := 0;
  BEGIN
    IF sales > (quota + 200) THEN
      bonus := (sales - quota)/4;
      IF whatever_else_you_like THEN
        do_something_here;
      END if;
    ELSE
      IF sales > quota THEN
        bonus := 50;
      ELSE
        bonus := 0;
      END IF;
    END IF;     
    DBMS_OUTPUT.PUT_LINE('bonus = ' || bonus);     
    UPDATE employees
    SET salary = salary + bonus 
    WHERE employee_id = emp_id;
  END p;
BEGIN
  p(10100, 10000, 120);
  p(10500, 10000, 121);
  p(9500, 10000, 122);
END;
/

您还可以根据需要创建任意数量的 ELSIF 语句。例如。

DECLARE
  PROCEDURE p (sales NUMBER)
  IS
    bonus  NUMBER := 0;
  BEGIN 
    IF sales > 50000 THEN
      bonus := 1500;
    ELSIF sales > 35000 THEN
      bonus := 500;
    ELSE
      bonus := 100;
    END IF;

    DBMS_OUTPUT.PUT_LINE (
      'Sales = ' || sales || ', bonus = ' || bonus || '.'
    );
  END p;
BEGIN
  p(55000);
  p(40000);
  p(30000);
END;
/

看看这个 PL/SQL 块结构示例 - 您需要记住使用 END IF 和分号 [=13= 将每个 IF 语句作为一个封闭的代码块结束].

BEGIN

  IF 10 > 5 THEN

    IF 10 < 20 THEN
      dbms_output.put_line('statement 1 from nested if');
    ELSE
      dbms_output.put_line('statement 2 from nested if');
    END IF;

  ELSE
    dbms_output.put_line('statement not from nested if');
  END IF;

END;