zoukankan      html  css  js  c++  java
  • plsql programming 04 条件和顺序控制

    1. 条件语句

      if salary > 40000 or salary is NULL

      then

         give_bonus(employee_id, 500);

      end if;

      if condition

      then

        ---

      else

        ---

      end if;

      if condition

      then

        statement1

      elsif condition

      then

        statement2

      else

        statement3

      end if;

      例如:

    IF salary >= 10000 AND salary <=20000 THEN
    	give_bonus(employee_id, 1500);
    ELSIF salary > 20000 AND salary <= 40000 THEN
    	give_bonus(employee_id, 10000);
    ELSIF salary > 40000 THEN
    	give_bouns(employee_id, 400);
    END IF;

     嵌套的 IF 语句

    IF condition 1 THEN

      IF codition 2 THEN

        IF condition 3 THEN

          statement 3

        END IF;

        statement 2

      END IF;

      statement 1

    END IF;

    像这种嵌套最好不要超过3层, 否则就比较难理解和维护.

    2. case 语句

    case expression

    when result1 then

      statement1

    when result2 then

      statement2

    else

      statement_else

    end case;

    例如:

    CASE employee_type
    WHEN 'S' THEN
    	award_salary_bonus(employee_id);
    WHEN 'H' THEN
    	award_hourly_bonus(employee_id);
    WHEN 'C' THEN
    	award_commissioned_bonus(employee_id);
    ELSE
    	RAISE invalid_employee_type;
    END CASE;

    case 作出 if else 效果

    CASE TRUE
    WHEN salary >= 10000 AND salary <= 20000 THEN
        give_bouns(employee_id, 1500);
    WHEN salary > 20000 AND salary < 40000 THEN
        give_bouns(employee_id, 1000);
    ELSE
        give_bouns(employee_id, 0);
    END CASE;


    搜索CASE 模型

    CASE

    WHEN salary > 40000 THEN

      give_bonus(employee_id, 1500);

    WHEN salary > 20000 THEN

      give_bonus(employee_id, 1000);

    ELSE

      give_bonus(employee_id, 0);

    END CASE;

    CASE 规则:

    • 一旦某些语句被执行, 整个执行也就结束了, 即便下边还有结果满足case的表达式, 换言之, 这里的case 自动带有 break,
    • ELSE 语句是可选的, 如果没有指定 ELSE,并且没有一个表达式求值结果是 true, 就会抛出 CASE_NOT_FOUND 异常.
    • WHEN 表达式是按照从上到下的顺序被依次求值.

    另外 CASE 语句的边界重叠问题, 要注意, 尽量让 CASE 的条件之间没有任何重叠部分.

    CASE 表达式

    简单型 CASE 表达式, 例如: (case 后边接表达式, 而这个表达式是我们想要的)

    declare

      boolean_true BOOLEAN := TRUE;

      boolean_false BOOLEAN := FALSE;

      boolean_null BOOLEAN;

      FUNCTION boolean_to_varchar2(flag IN BOOLEAN) RETURN VARCHAR2 IS

      BEGIN''

        RETURN

          CASE flag

             WHEN TRUE THEN 'True'

             WHEN FALSE THEN 'False'

             ELSE 'NULL'

           END;

      END;

    BEGIN

      DBMS_OUTPUT.PUT_LINE(boolean_to_varchar2(boolean_true));

      DBMS_OUTPUT.PUT_LINE(boolean_to_varchar2(boolean_false));

      DBMS_OUTPUT.PUT_LINE(boolean_to_varchar2(boolean_null));

    END;

    复杂类型的 case 表达式, case后边不接表达式, 例如:

    declare

      salary NUMBER := 20000;

      employee_id NUMBER := 36325;

      bonus_amount NUMBER;

    BEGIN

      bonus_amount :=

        CASE

          WHEN salary >= 10000 AND salary <= 20000 THEN 1500

          WHEN salary > 20000 AND salary <= 40000 THEN 1000

          WHEN salary > 40000 THEN 500

          ELSE 0

          END * 10;    -- 注意这步将结果乘以 10 了

       DBMS_OUTPUT.PUT_LINE(bonus_amout);

    END;

    与 CASE 语句不同, 即使 CASE 表达式中没有 WHEN 子句被选择也不会抛出异常, 相反, 如果没有WHEN条件被满足, CASE 表达式就会返回 NULL.

    只要可以使用其他类型表达式的地方, 就可以使用 CASE 表达式, 另外, case表达式只用一个 END; 来作为结尾.

    NULL 语句

    当你想让 PLSQL 什么也不做时, 就可以使用 NULL 语句, 例如:

    IF condition THEN

      statment1

    ELSE

      null;  -- do nothing

    END IF; 

  • 相关阅读:
    MongoDB理解
    jQuery+Ajax+PHP实现异步分页数据显示
    PHP设计模式四:适配器模式
    PHP设计模式三:原型设计模式
    Event Managers
    NetAdvantage
    英语
    CA1060
    DateTime和DateTime2
    宿主进程 vshost.exe
  • 原文地址:https://www.cnblogs.com/moveofgod/p/3443271.html
Copyright © 2011-2022 走看看