5.1 CASE语句

1. CASE语句具有如下结构

CASE SELECTOR

  WHEN EXPRESSION 1 THEN STATEMENT 1;

  WHEN EXPRESSSION 2 THEN STATEMENT 2;

  ........

  WHEN EXPRESSION N THEN STATEMENT N;

  ELSE STATEMENT N+1;

 END CASE;

保留字CASE标识CASE语句的开始。选择器决定哪个WHEN子句应该被执行。每个WHEN子句都包含一个EXPRESSION以及与之关联的一个或者多个可执行语句。ELSE子句是可选的。他的工作方式非常类似于IF-THEN-ELSE语句中所使用的ELSE子句。END CASE是标识CASE语句结束的保留字。注意,选择器只会计算一次。并且会顺序计算WHEN的子句。表达式的值与选择器的值进行比较。如果两种值相等。那么与特定WHEN子句相关的语句会执行,并且随后的WHEN的子句不会计算。如果任何表达式都不匹配选择器的值,则ELSE子句会被选中和执行。

2. 搜索式CASE语句

搜索式CASE语句有个能够产生boolean(true,false,null)的搜索条件,当特定搜索条件计算结果为TRUE时,会执行与该条件相关的语句组合。搜索式CASE语句的语法如下所示:

CASE

  WHEN SEARCH CONDIDTION 1 THEN STATEMENT 1;

  WHEN SEARCH CONDIDTION2 THEN STATEMENT 2;

  ........

  WHEN SEARCH CONDIDTIONN THEN STATEMENT N;

  ELSE STATEMENT N+1;

 END CASE;

当搜索条件的计算结果为TRUE时,执行控制权传递与之相关的语句。如果任何搜索条件都不会产生TRUE,则会执行与ELSE子句相关的语句。请注意,ELSE子句是可选的。

3. CASE语句和搜索式CASE语句之间的差别

搜索式的CASE语句没有选择器(可以这么说,因为它产生的是BOOLEN类型的搜索条件,那我们就给他一个函数表达式例如MOD(V_NUM,2)=0判断是TRUE FALSE OR NULL,而CASE语句需要把选择器传入,解释:(V_MUM_FLAG := MOD(V_NUM,2),所以你要在CASE 后面添加V_MUM_FLAG这个选择器 然后判断选择器0(when 0 THEN)

CASE语句

CASE V_MUM_FLAG

  WHEN 0 THEN

    STATEMEN

搜索式CASE语句

CASE

  WHEN MOD(V_NUM,2)=0 THEN

  STATEMEN.

5.2 CASE表达式

CASE表达式会返回一个值,这个值会接着被赋予一个变量。是使用复制操作符:=实现的

5.3 NULLIF和COALESCE函数

1. NULLIF函数

NULLIF函数会比较两个表达式。如果两者相同,函数会返回NULL,否则的话,返回第一个表达式的值。

NULLIF结构:

NULLIF(expression1, expression2)

如果expression1 等于 expression2,则NULLIF返回NULL.如果expression1 不等于 expresson2,NULLIF函数返回expression1.注意 NULLIF函数的作用与NVL函数相反。NVL如果第一个表达式是NULL,NVL函数返回第二个表达式。如果第一个表达式不是NULL.NVL返回第一个表达式

NULLIF函数等价于如下CASE表达式

CASE

  WHEN EXPRESSION1 = EXPRESSION2 THEN NULL

  ELSE EXPRESSION1

END

NULLIF函数存在一个限制:不能把字面值NULL赋予EXPRESSION1,

2. COALESCE[,kəʊə'les]函数

COALESCE的函数会把表达式列表中每一个表达式与NULL比较,并且返回第一个非NULL表达式的值。COALESCE函数具有如下结构

COALESCE(expression1,expression2,.........,expressionN)

如果expression1等于NULL,会计算expressioin2.如果expression2的计算结果部位NULL,这个函数会返回expression2,如果所有表达式的结果都是NULL,则这个函数返回NULL.

5.3.1 NULLIF函数

ORACLE PL/SQL 实例精解之第五章 条件控制:CASE语句的更多相关文章

  1. ORACLE PL/SQL 实例精解之第四章 条件控制:if 语句

    4.1 IF 语句 IF语句两种形式:IF-THEN IF-THEN-ELSE 使用IF-THEN,可以指定需要执行的一组动作. IF-THEN-ELSE语句指定两组动作 1. IF-THEN TRU ...

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

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

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

    7.1CONTINUE语句 CONTINUE语句会导致循环终止当前迭代.并且当CONTINUE的条件为TRUE时,开始执行该循环的下一次迭代.需要借助于IF语句来计算COUNTINUE条件.当CONT ...

  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 实例精解 05

    本章主要讨论 case 语句 1: case [SELECTOR] 2: when expression 1 then statement 1; 3: when expression 2 then s ...

  8. pl/sql 实例精解 03

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

  9. pl/sql 实例精解 04

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

随机推荐

  1. 彻底理解javascript 中的事件对象的pageY, clientY, screenY的区别和联系。

    说到底, pageY, clientY, screenY的计算,就是要找到参考点, 它们的值就是: 鼠标点击的点----------- 和参考点指点----------的直角坐标系的距离 stacko ...

  2. Android菜单menu控件大全

    下载:http://www.see-source.com/androidwidget/list.html?type=16 Android-NewPopupMenu 使用PopupWindow实现的Po ...

  3. 使用FMDB多线程訪问数据库,及database is locked的问题

    今天最终攻克了多线程同一时候訪问数据库时,报数据库锁定的问题.错误信息是: Unknown error finalizing or resetting statement (5: database i ...

  4. 三联动 支持ie6,ie7 省,市,区

    三联动 支持ie6,ie7 省,市,区 <html xmlns="http://www.w3.org/1999/xhtml"> <head> <tit ...

  5. c程序设计语言第一章5

    练习1.20请编写程序d e t a b

  6. Unicode解码转换为中文

    Unicode转中文2:Regex.Unescape(string str);str格式:"\uxxxx" ,举例:"\u300d"

  7. openwrt 配置rsync服务

    一: rsyn简介 remote synchronize顾名思意就知道它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限.时间.软硬链接等附加信息. rsync是用 “rsyn ...

  8. 模式识别之聚类算法k-均值---k-均值聚类算法c实现

    //写个简单的先练习一下,测试通过 //k-均值聚类算法C语言版   #include <stdlib.h>      #include <stdio.h>      #inc ...

  9. [Selenium]通过Selenium实现在当前浏览器窗口点击一个图标之后,弹出另外一个窗口,关闭这个窗口,再回到原来的窗口进行操作

    public void clickReportIcon(){ String initialWindowHandle = driver.getWindowHandle(); //保存原始的浏览器窗口 p ...

  10. Android GUI系统学习1:Gralloc

    Gralloc模块是从Android Eclair(android 2.1)開始增加的一个HAL模块,Gralloc的含义为是Graphics Alloc(图形分配).他对上为libui提供服务,为其 ...