📜  PL/SQL 中的决策(if-then , if-then-else, Nested if-then, if-then-elsif-then-else )

📅  最后修改于: 2021-09-08 16:19:16             🧑  作者: Mango

现实生活中会出现一些情况,当我们需要做出一些决定时,我们会根据这些决定来决定下一步应该做什么。类似的情况也出现在编程中,我们需要做出一些决定,并根据这些决定我们将执行下一个代码块。

编程语言中的决策语句决定了程序执行流程的方向。 pl/SQL 中可用的决策语句有:

  1. 如果那么语句
  2. if then else 语句
  3. 嵌套的 if-then 语句
  4. if-then-elsif-then-else 阶梯

  1. 如果那么语句
    if then语句是最简单的决策语句。它用于决定是否执行某个语句或语句块,即如果某个条件为真,则执行语句块,否则不执行。

    句法:

    if condition then
    -- do something
    end if;
    

    在这里,评估后的条件将是真或假。 if 语句接受布尔值——如果值为真,那么它将执行它下面的语句块,否则不执行。
    if 和 endif 在这里视为一个块。

    例子:-

    declare
    -- declare the values here
      
    begin
      
    if condition then
    dbms_output.put_line('output');
      
    end if;
      
    dbms_output.put_line('output2');
    end;
    

    -- pl/sql program to illustrate If statement
    declare
    num1 number:= 10;
    num2 number:= 20;
      
    begin
      
    if num1 > num2 then
    dbms_output.put_line('num1 small');
    end if;
      
    dbms_output.put_line('I am Not in if');
      
    end;
    

    因为 if 语句中存在的条件为假。因此,不会执行 if 语句下方的块。
    输出:

    I am Not in if
    

  2. 如果 – 那么 – 否则:
    单独的 if 语句告诉我们,如果条件为真,它将执行语句块,如果条件为假,则不会执行。但是,如果条件为假,我们想做其他事情怎么办。下面是 else 语句。当条件为假时,我们可以使用 else 语句和 if 语句来执行代码块。
    句法:-
    if (condition) then
        -- Executes this block if
        -- condition is true
    else 
        -- Executes this block if
        -- condition is false
    

    例子:-

    -- pl/sql program to illustrate If else statement
    declare
    num1 number:= 10;
    num2 number:= 20;
      
    begin
      
    if num1 < num2 then
    dbms_output.put_line('i am in if block');
      
    ELSE
    dbms_output.put_line('i am in else Block');
    end if;
      
    dbms_output.put_line('i am not in if or else Block');
    end;
    

    输出:-

    i'm in if Block
    i'm not in if and not in else Block
    

    在调用不在块中的语句(没有空格)后,当 if 语句中存在的条件为假时,将执行 else 语句后面的代码块。

  3. 嵌套如果然后:
    嵌套的 if-then 是一个 if 语句,它是另一个 if 语句的目标。嵌套的 if-then 语句意味着在另一个 if 语句中的 if 语句。是的,PL/SQL 允许我们在 if-then 语句中嵌套 if 语句。即,我们可以将一个 if then 语句放在另一个 if then 语句中。

    句法:-

    if (condition1) then
       -- Executes when condition1 is true
       if (condition2) then 
         -- Executes when condition2 is true
       end if; 
    end if;
    

    -- pl/sql program to illustrate nested If statement
    declare
    num1 number:= 10;
    num2 number:= 20;
    num3 number:= 20;
      
    begin
    if num1 < num2 then
    dbms_output.put_line('num1 small num2');
      
      if num1 < num3 then  
      dbms_output.put_line('num1 small num3 also');
      end if;
      
    end if;
      
    dbms_output.put_line('after end if');
    end;
    

    输出:-

    num1 small num2
    num1 small num3 also
    after end if
    

  4. if-then-elsif-then-else 阶梯
    在这里,用户可以在多个选项中做出决定。 if then 语句从上到下执行。一旦控制 if 的条件之一为真,则执行与该 if 相关的语句,并绕过梯形图的其余部分。如果没有一个条件为真,则将执行最后的 else 语句。

    句法:-

    if (condition) then
        --statement
    elsif (condition) then
        --statement
    .
    .
    else
        --statement
    endif
    

    流程图:-

    例子:-

    -- pl/sql program to illustrate if-then-elif-then-else ladder
    declare
    num1 number:= 10;
    num2 number:= 20;
      
    begin
      
    if num1 < num2 then
    dbms_output.put_line('num1 small');
      
    ELSIF num1 = num2 then
    dbms_output.put_line('both equal');
      
    ELSE
    dbms_output.put_line('num2 greater');
    end if;
      
    dbms_output.put_line('after end if');
    end;
    

    输出:-

    num1 small
    after end if