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. python 学习笔记 13 -- 经常使用的时间模块之time

    Python 没有包括相应日期和时间的内置类型.只是提供了3个相应的模块,能够採用多种表示管理日期和时间值: *    time 模块由底层C库提供与时间相关的函数.它包括一些函数用于获取时钟时间和处 ...

  2. vue2.0 常用的 UI 库

    1.mint-ui 安装: npm install mint-ui --save 使用: main.js // MintUI组件库 import MintUI from 'mint-ui' impor ...

  3. Go fsm

    package fsm import ( "log" ) type EvtIf interface { GetEvtType() string } type Action inte ...

  4. 【转载】分布式RPC框架性能大比拼

    dubbo.motan.rpcx.gRPC.thrift的性能比较 Dubbo 是阿里巴巴公司开源的一个Java高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 ...

  5. 【转载】Open Live Writer 安装

    Open Live Writer来源 Windows Live Writer在2012年就停止了更新,Open Live Writer是由Windows Live WriterWriter更名而来,是 ...

  6. ActiveMQ(一) 转

    package pfs.y2017.m11.mq.activemq.demo01; import javax.jms.Connection; import javax.jms.DeliveryMode ...

  7. UBUntu 软件 源配置方法

        近期公司产品须要添加一个功能,就是版本号自己主动更新.使用apt-get 实现. apt-get 软件源配置的方法,參见本人资源里的共享.以下是代码中作为升级的一部分.  FILE *fp; ...

  8. [网页游戏开发]进一步了解Morn UI及工作流

    Morn UI工作流 Morn Builder不仅仅是对Flash IDE的改进,传统的开发协作是以fla为基础,由于fla是二进制文件,在以svn等版本控制软件协作下,合并过程中会出现各种各样的问题 ...

  9. YTUOJ-推断字符串是否为回文

    题目描写叙述 编敲代码,推断输入的一个字符串是否为回文.若是则输出"Yes",否则输出"No".所谓回文是指順读和倒读都是一样的字符串. 输入 输出 例子输入 ...

  10. git常用知识笔记

    学习资料: http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 http://codi ...