• 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.

  • 相关阅读:
    树莓派更新失败【sudo rpi-update】
    树莓派连接显示器没反应
    Linux命令
    Ansys Fluent报错:an error or interrupt occurred while reading the journal file
    Ansys Fluent从cmd命令行中打开后无法编译UDF【解决】
    Ansys Fluent中动网格运动时,网格被挤压和拉伸,不能及时重画网格而报错【解决】
    ANSYS Fluent中动网格里Event(事件)选项为灰色不可选【解决】
    ANSYS ICEM导入step模型报错【解决】
    win10关闭任务栏程序最近显示
    MATLAB %% 不分节
  • 原文地址:https://www.cnblogs.com/moveofgod/p/3652055.html
Copyright © 2020-2023  润新知