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. virtualenv 配置python3环境

    virtualenv -p /usr/bin/python3 py3env source py3env/bin/activate pip install package-name

  2. 在chrome中屏蔽百度推荐

    在chrome中屏蔽百度推荐 方法1:可以使用adblock plus来进行屏蔽: 需要将chrome的扩展程序打开为调试者模式: 下载地址:http://chromecj.com/productiv ...

  3. booth乘法器原理

    在微处理器芯片中,乘法器是进行数字信号处理的核心,同一时候也是微处理器中进行数据处理的wd=%E5%85%B3%E9%94%AE%E9%83%A8%E4%BB%B6&hl_tag=textli ...

  4. 配置resin支持maven项目

    1. 在resin.conf中找到 <!-- includes the app-default fordefault web-app behavior --> <resin:impo ...

  5. TCP socket心跳包示例程序

    在做游戏开发时,经常需要在应用层实现自己的心跳机制,即定时发送一个自定义的结构体(心跳包),让对方知道自己还活着,以确保连接的有效性. 在TCP socket心跳机制中,心跳包可以由服务器发送给客户端 ...

  6. AIX下RAC搭建 Oracle10G(二)主机配置

    AIX下RAC搭建系列 AIX下RAC搭建 Oracle10G(二)主机配置 环境 节点 节点1 节点2 小机型号 IBM P-series 630 IBM P-series 630 主机名 AIX2 ...

  7. CycleViewPager

    https://github.com/zhaozhentao/CycleViewPager

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

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

  9. 基于mac系统的apacheserver的使用流程

    打开终端.输入下面命令:sudo apachectl start 此时Apache已经开启.在浏览器中输入本地ip地址能够看到it works! 打开前往----电脑------Macintosh H ...

  10. Git使用之Permission Denied问题解决

    今天碰到了Git的Permission Denied问题. 在安装好git之后,我们通常会配置username和邮箱 git config --global user.name "zengj ...