NESTED IF在PL/SQL中

Soo*_*yam -2 plsql nested-if

我试图在pl/sql块中编写嵌套的IF.我该如何正确安排.

IF r1.CABLE_TYPE = "A" THEN
var_root = FC_CPSCBPR1.C_111_SCPSCBP
Run Code Online (Sandbox Code Playgroud)

逻辑我现在必须包括在内

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
Run Code Online (Sandbox Code Playgroud)

Ger*_*rat 7

看看嵌套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;
/
Run Code Online (Sandbox Code Playgroud)

您还可以根据需要使用尽可能多的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;
/
Run Code Online (Sandbox Code Playgroud)