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. [Unit Testing] Test async function with Jasmine

    Most of time, when we want to test function call inside a promise, we can do: it('Should be async', ...

  2. photoshop 前端常用技巧

    1.将图片转换成 png 格式 并且 使背景透明 (1)用矩形选框工具选取一块区域 (2)右键 选择 ‘变换选区’ 进行微调 F8 查看尺寸 (3)复制图层(ctrl+c) ->新建文件(ctr ...

  3. 一个TAB的jquery简单写法

    <style> .honver{ color:red;} </style><script src="../js/jquery-1.9.0.min.js" ...

  4. sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)

    sql server 关于表中只增标识问题   由于我们系统时间用的过长,数据量大,设计是采用自增ID 我们插入数据的时候把ID也写进去,我们可以采用 关闭和开启自增标识 没有关闭的时候 ,提示一下错 ...

  5. [转载]C函数的实现(strcpy,atoi,atof,itoa,reverse)

    在笔试面试中经常会遇到让你实现C语言中的一些函数比如strcpy,atoi等 1. atoi 把字符串s转换成数字 int Atoi( char *s ) { , i = ; ; ; isspace( ...

  6. sanic官方文档解析之logging和request Data

    1,sanic的logging: Sanic允许有做不同类型的日志(通过的日志,错误的日志),在基于Python3的日志API接口请求,你必须具备基本的Python3的日志知识,在你如果想创建一个新的 ...

  7. python 1: 解决linux系统下python中的matplotlib模块内的pyplot输出图片不能显示中文的问题

    问题: 我在ubuntu14.04下用python中的matplotlib模块内的pyplot输出图片不能显示中文,怎么解决呢? 解决: 1.指定默认编码为UTF-8: 在python代码开头加入如下 ...

  8. QT实现FTP服务器(一)

    QListenSocket类的实现: #include "QListenSocket.h" #include <QTcpSocket> #include <QDe ...

  9. js对闭包的理解

    原文链接http://www.jb51.net/article/24101.htm,讲的很好,清晰明了.

  10. 关于树论【动态树问题(LCT)】

    搬运:看一道caioj1439 题目描述 一开始给你一棵n个点n-1条边的树,每个点有一个权值wi. 三种操作: op=1 u v :在点u和点v之间建一条边. op=2 u v:摧毁点u到点v之间的 ...