本章主要讨论 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.

pl/sql 实例精解 05的更多相关文章

  1. pl/sql 实例精解 03

    1. 在Pl/sql 中使用 sql 1: /* 2: * 一个 pl/sql 语句块, 只是一个容器, 是表明一个整体的容器, 容器里可以放置多个sql语句 3: */ 4:   5: declar ...

  2. pl/sql 实例精解 04

    本章主要讨论, IF 语句的应用. 1: if condition1 then 2: statement1 3: elsif condition2 then 4: statement2 5: else ...

  3. ORACLE PL/SQL 实例精解之第六章 迭代控制之一

    6.1 简单循环 简单循环,就想其名称一张,是一种最基本循环.简单循环具有如下结构 LOOP STATEMENT 1; STATEMENT 2; ... STATEMENT N; END LOOP; ...

  4. ORACLE PL/SQL 实例精解之第三章 PL/SQL中的SQL

    3.1 在PL/SQL中使用DML 在PL/SQL语块中,两种变量赋值a. := 初始化.b. select into语法,PL/SQL语块的声明部分被声明的变量,后期可以使用选择语句进行赋值. 3. ...

  5. ORACLE PL/SQL 实例精解之第二章 通用编程语言基础

    通用编程语言基础 2.1PL/SQL编程基础 1. 字符类型:支持四中类型字符:字母,数字,符号和空格,组合一个或多个字符就会创建一个词汇单元 2. 词汇单元 a.标识符必须以字符开头 b.保留字是p ...

  6. ORACLE PL/SQL 实例精解之第一章 PL/SQL概念

    1.传统一层一层传数据,而PLSQL作为独立的单元返回客户端,减少查询,减少网路传输的往返,高效 2.PL/SQL语句块 分为两种:命名(子程序,函数,包保存在数据库中,后期可以根据名称进行引用),匿 ...

  7. pl/sql 实例精解 06

    1. 简单循环 1: LOOP 2: statement1; 3: statement2; 4: EXIT WHEN condition; 5: END LOOP; 6: statement3; 也可 ...

  8. pl/sql 实例精解 08

    1: EXCEPTION 2: WHEN EXCEPTION_NAME THEN 3: ERROR-PROCESSING STATEMENTS; 写在 begin 与 end 的之间的处理异常块. 常 ...

  9. pl/sql 实例精解 07

    这章主要讨论 oracle11g 新特性, continue, continue when 语句 continue 的作用同其他编程语言一样. continue when condition 只是当条 ...

随机推荐

  1. 利用SmtpClient发送邮件

    1  163邮箱 HOST:smtp.163.com public static string CreateTimeoutTestMessage(string server) { string Suc ...

  2. 通过web php 执行shell脚本,获取的结果与直接在命令行下获取的结果不同。

    公司项目中的一项小功能,统计设备的连接数.其中用到shell脚本来获取已连接设备的统计.使用命令 /bin/netstat -an| grep ESTABLISHED | awk '{print $4 ...

  3. COSMOSBOX手遊制作手册(Word备份)

    20140712版 版本号 Version 日期 Date 作者 Author 变更主要原因描述 Brief Description 1.0 2014-4-26 陈霈霖 初稿 2.0 1. 前言 本手 ...

  4. 设计模式在cocos2d-x中的使用--简单工厂模式(Simple Factory)

    什么是简单工厂模式? 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式.通过专门定义一个类来负责创建其它类的实例,被创建的实例 ...

  5. hibernate 启动和辅助类实现资源的重复使用

    来自API: 1.2.5.  启动和辅助类 是时候来加载和储存一些Event对象了,但首先我们得编写一些基础的代码以完成设置.我们必须启动Hibernate,此过程包括创建一个全局的SessoinFa ...

  6. 修改select下拉框的下拉按钮

    ie上的下拉框下拉按钮真是太丑了,如何把他自定义一下呢? 首先,把浏览器自带的下拉框去掉:  select::-ms-expand { display: none; } 接下来,用自己喜欢的下拉图片去 ...

  7. Linux命令-网络命令:mail

    root用户发送邮件 mail wangyunpeng 给wangyunpeng发送邮件,wangyunpeng不在线也可以收到发送的邮件 wangyunpeng用户接收邮件 mail 接收邮件 he ...

  8. 解决Win10系统下 C# DateTime 出现星期几的问题 解决ASP.NET MVC 接受Request Playload参数问题

    解决Win10系统下 C# DateTime 出现星期几的问题 昨天晚上写代码的时候偶然发现 DateTime 里出现了星期几,当时一阵凌乱,去网上百度没有详细解决办法,很多人说可以用用 ToStri ...

  9. Ant + ivy的安装

    有了Ivy的帮忙,我们不需要为了一个库依赖管理而舍弃Ant去学那个难搞的Maven了.  基本配置步骤如下:  1.copy Ivy插件到ant_home/lib下: ivy安装 简单的安装方法: 直 ...

  10. python ---用户输入

    范例1:我们希望整数(整数),这就是为什么我们使用int()函数. x = int(raw_input("Enter x:")) y = int(raw_input("E ...