zoukankan      html  css  js  c++  java
  • pl/sql 实例精解 05

    本章主要讨论 case 语句

       1:  case [SELECTOR]
       2:    when expression 1 then statement 1;
       3:    when expression 2 then statement 2;
       4:    ...
       5:    when expression N then statement N;
       6:    else statement N+1;
       7:  end case;

    注意: pl/sql 中的 case 没有 break;

       1:  declare
       2:      v_num        number := &sv_user_num;
       3:      v_num_flag    number;
       4:  begin
       5:      v_num_flage := mod(v_num, 2);
       6:      case v_num_flag
       7:          when 0 then
       8:              dbms_output.put_line(v_num || 'is even number');
       9:          else
      10:              dbms_output.put_line(v_num || 'is odd number');
      11:      end case;
      12:      dbms_output.put_line('Done');
      13:  end;
      14:  /
      15:  show errors;

    注意: case 语句有两种形式,

    1. 普通形式的 case 语句, 如上例 (有选择器, SELECTOR)

    2. 搜索形式的 case 语句, 即 case 关键词后边没有跟表达式, 而是直接逻辑判断 when 后边的 expression , 如果为真就执行, 如下例子: (没有选择器, SELECTOR)

       1:  -- 不带选择器的(SELECTOR)CASE语句
       2:  declare
       3:      v_num        number := &sv_user_num;
       4:      v_num_flag    number;
       5:  begin
       6:      case 
       7:          when MOD(v_num, 2) = 0 then
       8:              dbms_output.put_line(v_num || 'is even number');
       9:          else
      10:              dbms_output.put_line(v_num || 'is odd number');
      11:      end case;
      12:      dbms_output.put_line('Done');
      13:  end;
      14:  /
      15:  show errors;

    使用 case 表达式 (表达式一定要与变量对应)

       1:  -- case 表达式
       2:  declare
       3:      v_num        number := &sv_user_num;
       4:      v_num_flag     number;
       5:      v_result    varchar2(30);
       6:  begin
       7:      v_num_flag := mod(v_num, 2);
       8:      
       9:      v_result :=
      10:      case v_num_flag
      11:          when 0 then v_num || 'is even number'
      12:          else v_num || ' is odd number'
      13:      end;        -- 注意: 这只是 end, 而不是 end case
      14:      
      15:  end;
      16:  /
      17:  show errors;

    BULLIF, COALESCE 函数

    NULLIF(expression1, expression2), 如果 expression1 = expression2, 返回 null, 否则 返回 expression1. 这个函数与 NVL 函数相反

    例如:

       1:  declare
       2:      v_num        number := &sv_user_num;
       3:      v_remainder    number;
       4:  begin
       5:      v_remainder := NULLIF(MOD(v_num, 2), 0);  -- 函数会返回值
       6:  end;
       7:  /
       8:  show errors;

    COALESCE(expression1, expression2, …, expressionN), 若果expression1 是null, 就确认expression2, 如果expression2 也是null, 就确认expression3 以此类推, 直到一个不为null 的值. 如果所有的expression都是null, 那么这个函数就返回 null.

  • 相关阅读:
    Leetcode Reverse Words in a String
    topcoder SRM 619 DIV2 GoodCompanyDivTwo
    topcoder SRM 618 DIV2 MovingRooksDiv2
    topcoder SRM 618 DIV2 WritingWords
    topcoder SRM 618 DIV2 LongWordsDiv2
    Zepto Code Rush 2014 A. Feed with Candy
    Zepto Code Rush 2014 B
    Codeforces Round #245 (Div. 2) B
    Codeforces Round #245 (Div. 2) A
    Codeforces Round #247 (Div. 2) B
  • 原文地址:https://www.cnblogs.com/moveofgod/p/3652055.html
Copyright © 2011-2022 走看看