Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CASE语句与CASE表达式

CASE语句与CASE表达式

作者头像
Leshami
发布于 2018-08-14 03:00:49
发布于 2018-08-14 03:00:49
1.4K00
代码可运行
举报
文章被收录于专栏:乐沙弥的世界乐沙弥的世界
运行总次数:0
代码可运行

case语句与case表达式是plsql流程控制的重要组成部分,尽管其使用方法较为简单,但容易混淆。本文将描述case语句与case表达式并给出演示以便于更好理解两者的异同及使用时的注意事项。 一、简单case语句

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-->语法

CASE SELECTOR
WHEN EXPRESSION 1 THEN STATEMENT 1;
WHEN EXPRESSION 2 THEN STATEMENT 2;
...
WHEN EXPRESSION N THEN STATEMENT N;
ELSE STATEMENT N+1;
END CASE;

--简单的case语句是指SELECTOR中得到的值或结果与EXPRESSION n中的值或结果相匹配,一旦找到匹配,则对应的语句被执行。直到找到为止。
--如果对应的EXPRESSION n 中没有匹配,则此时ELSE上阵,执行其后对应的语句。
--ELSE为可选项。如省略且when条件中未找到任何匹配项,则收到case_not_found异常。

-->演示简单case语句
sys@ORCL> DECLARE
  2     v_num    NUMBER := &in_num;
  3     v_flag   NUMBER;
  4  BEGIN
  5     v_flag := MOD (v_num, 2);
  6  
  7     CASE v_flag
  8        WHEN 0
  9        THEN
 10           DBMS_OUTPUT.put_line (v_num || ' is even number');
 11        WHEN 1
 12        THEN
 13           DBMS_OUTPUT.put_line (v_num || ' is odd number');
 14        ELSE
 15           NULL;
 16     END CASE;
 17  END;
 18  /
Enter value for in_num: 5
5 is odd number

PL/SQL procedure successfully completed.

二、搜索式case语句

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-->语法

CASE
WHEN SEARCH CONDITION 1 THEN STATEMENT 1;
WHEN SEARCH CONDITION 2 THEN STATEMENT 2;
...
WHEN SEARCH CONDITION N THEN STATEMENT N;
ELSE STATEMENT N+1;
END CASE;

--搜索式case语句与简单case语句长相不一样。首先是case 之后没有接selector,其次是when之后的SEARCH CONDITION n得到的结果为布尔型,
--当搜索到第一个为TRUESTATEMENT的结果会被返回。若果所有的when之后的SEARCH CONDITION没有为TRUE的,则else之后的STATEMENT
--的结果会被返回。如果此时省略了else子句,等同于简单case语句,同样会收到case_not_found异常。谁叫他俩一母同胞呢?

-->下面演示搜索式case
scott@ORCL> DECLARE
  2     v_num   NUMBER := &in_num;
  3  BEGIN
  4     CASE
  5        WHEN v_num > 0
  6        THEN
  7           DBMS_OUTPUT.put_line (v_num || ' is a positive number ');
  8        WHEN v_num < 0
  9        THEN
 10           DBMS_OUTPUT.put_line (v_num || ' is a negative number ');
 11        ELSE
 12           DBMS_OUTPUT.put_line (v_num || ' is zero ');
 13     END CASE;
 14  END;
 15  /
Enter value for in_num: -3
-3 is a negative number

-->如下例所示所有的when之后的没有一个为true,且省略了else子句,那么迎接你的是CASE not found
scott@ORCL> DECLARE
  2     v_num   NUMBER := &in_num;
  3  BEGIN
  4     CASE
  5        WHEN v_num > 0
  6        THEN
  7           DBMS_OUTPUT.put_line (v_num || ' is a positive number ');
  8        WHEN v_num < 0
  9        THEN
 10           DBMS_OUTPUT.put_line (v_num || ' is a negative number ');
 11     END CASE;
 12  END;
 13  /
Enter value for in_num: 0
DECLARE
*
ERROR at line 1:
ORA-06592: CASE not found while executing CASE statement
ORA-06512: at line 4

/**************************************************/                                                                        
/* Author: Robinson Cheng                         */                                                                        
/* Blog:   http://blog.csdn.net/robinson_0612     */                                                                        
/* MSN:    robinson_0612@hotmail.com              */                                                                        
/* QQ:     645746311                              */                                                                        
/**************************************************/ 

三、简单case语句与搜索式case语句的异同

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--相同点:两者都用于根据不同的条件,来执行与之对应的语句或完成特定的任务,甚至某些情况下可以互换替换。
--不同点: 
	--简单case语句提供一个selector选择器,且EXPRESSION的数据类型一定与selector的数据类型匹配,否则报错。
	--搜索case语句没有selector选择器,且when子句之后得到的结果一定是一个布尔型值(NULL,TRUR,FALSE)

--下面的例子是一个简单case与搜索case之间互换的例子,同时该方式也实现了行到列的转行。
scott@ORCL> select sum(case when deptno=20 then sal end) as sal_sum_20,   -->搜索式case表达式 @20150713更正
  2  sum(case when deptno=30 then sal end) as sal_sum_30
  3  from emp where comm>300;

SAL_SUM_20 SAL_SUM_30
---------- ----------
     13075       8300

scott@ORCL> select sum(case deptno when 20 then sal end) as sal_sum_20,  -->简单式case表达式  @20150713更正
  2  sum(case deptno when 30 then sal end) as sal_sum_30
  3  from emp where comm>300;

SAL_SUM_20 SAL_SUM_30
---------- ----------
     13075       8300
	 
--使用搜索式case方式,当selector选择器的数据类型不是为布尔型时,收到类型不匹配的提示,如下示例:	 
scott@ORCL> DECLARE
  2     v_num    NUMBER := &sv_num;
  3     v_flag   NUMBER;
  4  BEGIN
      THEN
  5     CASE v_flag
  6        WHEN MOD (v_num, 2) = 0
  7        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  END;
 13  /
Enter value for sv_num: 7
   CASE v_flag
        *
ERROR at line 5:
ORA-06550: line 5, column 9:
PLS-00615: type mismatch found at 'V_FLAG' between CASE operand and WHEN operands
ORA-06550: line 5, column 4:
PL/SQL: Statement ignored

四、case表达式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--Case表达式与Case语句,如何理解呢?我们不妨来望文生义,便于记忆。分析如下:
--Case表达式,那么when 之后接的一定是表达式或一个特定值。
--Case语句,那么when之后接的特定一个语句,或函数,或计算表达式。既然是语句则一定带有分号。
--最后一点区别是case以end结束,而case语句则是以case end结束。

scott@ORCL> DECLARE
  2     v_num      NUMBER := &in_num;
  3     v_flag     NUMBER;
  4     v_result   VARCHAR2 (20);
  5     BEGIN
  6     v_flag := MOD (v_num, 2);
  7  
  8     v_result :=
  9        CASE v_flag
 10           WHEN 0 THEN TO_CHAR (v_num) || ' is even number'
 11           WHEN 1 THEN TO_CHAR (v_num) || ' is odd number'
 12        END;
 13     DBMS_OUTPUT.put_line (v_result);
 14  END;
 15  /
Enter value for in_num: 3
3 is odd number

PL/SQL procedure successfully completed.

-->下面的写法也较为常用
scott@ORCL> SELECT ename,
  2         CASE deptno
  3            WHEN 20 THEN 'Developement'
  4            WHEN 30 THEN 'Sales'
  5            ELSE 'Clerk'
  6         END
  7            AS deptname
  FROM scott.emp;
  8  
ENAME      DEPTNAME
---------- ------------
john       Clerk
Henry      Developement
ALLEN      Sales
WARD       Sales
..........

五、case嵌套

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--case的嵌套就是case语句和表达式中嵌套case语句与表达式,理解了case的用法,case嵌套并不难。注意casecase end/end的匹配问题
--下面是一个使用case表达式演示的case嵌套示例。
--更新表emp中的comm列,首要case是根据部门来判断,其下又嵌套了一个case,根据comm值的不同来确定新的comm值。
UPDATE scott.emp
   SET comm =
          CASE deptno
             WHEN 20 THEN CASE
                             WHEN comm IS NULL THEN 500
                             WHEN comm < 200 THEN 300
                             ELSE 100
                          END
             WHEN 30 THEN CASE
                             WHEN comm IS NULL THEN 700
                             WHEN comm < 200 THEN 500
                             ELSE 200
                          END
             ELSE 1000
          END;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2012年03月10日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
3499美元的苹果MR头显来了!供应链曝光!国产厂商机会在哪?
美国东部时间6月5日下午1点,苹果举办了2023年度开发者大会(WWDC),苹果还如传闻所预期的那样,正式发布了MR头显Vision Pro以及与之配套的visionOS操作系统。
芯智讯
2023/08/09
2540
3499美元的苹果MR头显来了!供应链曝光!国产厂商机会在哪?
苹果憋了7年的AR头显真值2万5?第一批试戴的人这么说
花 3500 美元(约合 2.5 万元人民币)买一个AR头显,就问你愿不愿意?这是苹果在 6 月 5 日的 WWDC 大会上给所有人出的一道难题。
机器之心
2023/08/07
2240
苹果憋了7年的AR头显真值2万5?第一批试戴的人这么说
苹果的首款元宇宙硬件:售价超2000美元,最快下半年上市
随着元宇宙概念不断升温,苹果的混合现实头戴设备成为了传闻最多的产品。2022 年 1 月,不仅著名分析师郭明錤谈到了它,显示器供应链分析师也谈到了它。最近几天,人们又发掘出了新的信息。
机器之心
2022/02/23
2440
苹果的首款元宇宙硬件:售价超2000美元,最快下半年上市
苹果的同行,能否喝到Vision Pro的热汤
写在前面:VR(Virtual Reality,虚拟现实)、AR(Augmented Reality,增强现实)、MR(混合现实)等相关概念众多,非行业人士真的分不清。在此文中,我们将与此相关的行业定义为元宇宙行业。
华尔街科技眼
2023/06/08
2310
苹果Vision Pro预售:18分钟内售罄,代购加价上万!
官方提供了256GB、512GB和1TB三种版本,售价分别是3499美元(约合人民币2.5万元)、3699美元(约合人民币2.66万元)、3899美元(约合人民币2.8万元)。
芯智讯
2024/01/23
1510
苹果Vision Pro预售:18分钟内售罄,代购加价上万!
苹果Vision Pro今年出货量或达60万台,Micro OLED供应将是瓶颈
1月19日消息,苹果首款“空间计算设备”Vision Pro即将于美国当地时间2月2日率先在美国上市,今天晚间就将开始预售,售价高达3499元。
芯智讯
2024/01/23
1090
苹果Vision Pro今年出货量或达60万台,Micro OLED供应将是瓶颈
Vision Pro全球首拆第二弹!54倍像素塞进iPhone 15 Pro,分辨率效果惊人
在iFixit团队全球首拆Vision Pro几天之后,他们又对Vision Pro最核心的部件——显示模块进行了进一步的拆解。
新智元
2024/02/26
2660
Vision Pro全球首拆第二弹!54倍像素塞进iPhone 15 Pro,分辨率效果惊人
2.25VR行业大事件:苹果AR/VR将采用Micro LED显示屏,三星在研发竞品
(VRPinea 2月25讯)今日重点新闻:苹果AR/VR将采用Micro LED显示屏,三星在研发竞品;开发基于音频驱动的面部动画技术,Speech Graphics完成700万美元融资;OPPO Air Glass智能眼镜3月3日上市。
VRPinea
2022/03/11
4000
2.25VR行业大事件:苹果AR/VR将采用Micro LED显示屏,三星在研发竞品
7月,Meta宣布Quest 2价格上涨100美元
(VRPinea8月1日讯)Meta在7月底宣布,旗下VR头显Quest 2将从8月,也就是今日起全面提价100美元,128GB型号的价格提高到399.99美元,256GB型号涨至499.99美元。同时,相关配件和翻新Quest 2产品也会涨价。而作为弥补,Meta承诺给在今年8月1日至12月31日期间购买Quest 2的用户,赠送经典VR游戏《节奏光剑》。
VRPinea
2022/11/16
6090
7月,Meta宣布Quest 2价格上涨100美元
苹果入局大厂消息不断,VR硬件是时候雄起了么?
如果说iPhone的成功开启了苹果的上一个10年,那么继续引领苹果的下一个10年辉煌的产品将会是什么呢?
VRPinea
2021/04/09
3900
苹果入局大厂消息不断,VR硬件是时候雄起了么?
苹果正测试3D面部扫描功能,几百毫秒内即可解锁手机
前不久,苹果供应商台积电披露iPhone 8三大新变化时提及Home键取消。争论点主要落在苹果究竟会用哪种生物识别方式,台积电说是屏幕识别指纹,还有传言称将用到面部识别。 有关前者,4月投资机构Cowen & Company分析师Timothy Arcuri指出,苹果仍努力将Touch ID集成进屏幕,5月确定最后指纹传感器规格。具体进展如何还不得而知,只知道苹果正测试手势功能,如通过在屏幕中间滑动来启动,以替代Home键。 面部识别方面的新消息则多些,彭博社报道称,苹果在开发一功能,用户能通过脸而非指纹解
BestSDK
2018/03/01
1K0
拆解iPhone 15 Pro Max:内部细节及元器件大曝光!
近日,苹果新一代智能手机iPhone 15系列已经上市开售,国外专业拆解机构iFixit也第一时间对于iPhone 15 Pro Max进行了拆解。
芯智讯
2023/09/27
1.2K0
拆解iPhone 15 Pro Max:内部细节及元器件大曝光!
2023年上市!Quest 3大量细节曝光:不支持眼动追踪,网友闹翻了
---- 新智元报道   编辑:桃子 【新智元导读】10月,Meta Connect大会上会公布最新头显Quest Pro。在此之前,YouTube网友曝光了即将在明年上市的Quest 3设计图。 Quest Pro即将在下个月露面了。 现在,网友又爆出了Quest 3的设计图,这是Meta将在2023年上市的最新头显。 不支持眼面部追踪 今天,YouTube博主Brad Lynch上传了一段关于介绍Quest 3的CAD设计图的视频。 据2022年5月泄露的一份路线图,Meta计划分别于
新智元
2022/10/08
1.2K0
2023年上市!Quest 3大量细节曝光:不支持眼动追踪,网友闹翻了
苹果封神头显Vision Pro竟暗藏「脑机接口」!苹果前员工疯狂揭秘读心操控
正如库克所称,这将开启「空间计算」时代,足见Vision Pro对所有人来说意义非凡。
新智元
2023/08/05
2340
苹果封神头显Vision Pro竟暗藏「脑机接口」!苹果前员工疯狂揭秘读心操控
助力苹果 Vision Pro等3D应用,鹅厂竟推出了这个软件?
2023年6月6日,备受全球科技圈瞩目的 Apple Vision Pro 在苹果全球开发者大会(WWDC)上正式发布,宣称通过对 MV-HEVC 编码标准的硬件编解码支持,显著提升了 3D 视频主客观体验。一时间,很多开发者都在搜索 MV-HEVC 是什么,跟传统的基于 HEVC 的 3D 编码有什么区别?Apple Vision Pro 的技术是如何实现的?腾讯跟 MV-HEVC 又有什么关系?本文带你揭晓,欢迎阅读。
腾讯云开发者
2023/08/03
6371
助力苹果 Vision Pro等3D应用,鹅厂竟推出了这个软件?
2022年1月,VR圈发生了这些值得关注的事……
(VRPinea2月9日讯)冰墩墩、雪容融、中国女足、王濛、谷爱凌,这几天小P的社交平台频频被这些相关词刷屏。在为我国冰雪运动员呐喊助威的同时,也不妨来关注下1月VR圈发生的大事件吧。
VRPinea
2022/03/11
6770
2022年1月,VR圈发生了这些值得关注的事……
苹果2万亿美元市值一夜崩塌!AR/VR或是救命丸,最全头显爆料来了
2023年,骗子的手段也在快速迭代!杀猪盘、网络兼职、疫情诈骗、虚拟投资诈骗……各种套路层出不穷。诈骗分子玩的是哪些新套路?我们又该怎么利用AI技术护身防骗?本周五上午10:00,新智元CEO杨静女士联合浪潮信息算法研究员张辉博士,以及B站顶流up主「图灵的猫」,为您带来一场精彩的AI反诈论坛。届时,新智元视频号将独家放送直播,敬请期待!
新智元
2023/01/09
5780
苹果2万亿美元市值一夜崩塌!AR/VR或是救命丸,最全头显爆料来了
5.2 VR扫描:苹果Mac Pro新增VR/AR类别,三星或收购微型LED制造商
三星或将1.5亿美金收购微型LED制造商PlayNitride 据悉,三星电子目前有意收购 LED 面板制造商 PlayNitride,原因在于三星对其微型 LED 技术感兴趣。PlayNitride
VRPinea
2018/05/16
6050
从“嘿,Siri”到元宇宙,苹果还有多远距离要走?
在当前的科技浪潮中,元宇宙的概念凭借其无限的想象力和可能性,像一颗耀眼的新星吸引着世界的目光。巨大的发展潜力,吸引着一波又一波的企业,前赴后继地向元宇宙发起冲锋。
数据猿
2023/09/27
2400
从“嘿,Siri”到元宇宙,苹果还有多远距离要走?
多次跳票的苹果VR/AR设备,究竟酝酿了哪些大招?
(VRPinea 3月4日讯)2020年,Facebook正式发布了Oculus Quest 2 VR一体机,进一步吸引潜在用户进入VR阵营。随着热门VR游戏的涌现和元宇宙概念的火爆,VR热潮在2021年再度开启。当前,随着硬件各方面的技术趋于成熟,用户享受到了更具沉浸感的体验,从而拉动了VR设备的出货量。
VRPinea
2022/04/14
3310
多次跳票的苹果VR/AR设备,究竟酝酿了哪些大招?
推荐阅读
3499美元的苹果MR头显来了!供应链曝光!国产厂商机会在哪?
2540
苹果憋了7年的AR头显真值2万5?第一批试戴的人这么说
2240
苹果的首款元宇宙硬件:售价超2000美元,最快下半年上市
2440
苹果的同行,能否喝到Vision Pro的热汤
2310
苹果Vision Pro预售:18分钟内售罄,代购加价上万!
1510
苹果Vision Pro今年出货量或达60万台,Micro OLED供应将是瓶颈
1090
Vision Pro全球首拆第二弹!54倍像素塞进iPhone 15 Pro,分辨率效果惊人
2660
2.25VR行业大事件:苹果AR/VR将采用Micro LED显示屏,三星在研发竞品
4000
7月,Meta宣布Quest 2价格上涨100美元
6090
苹果入局大厂消息不断,VR硬件是时候雄起了么?
3900
苹果正测试3D面部扫描功能,几百毫秒内即可解锁手机
1K0
拆解iPhone 15 Pro Max:内部细节及元器件大曝光!
1.2K0
2023年上市!Quest 3大量细节曝光:不支持眼动追踪,网友闹翻了
1.2K0
苹果封神头显Vision Pro竟暗藏「脑机接口」!苹果前员工疯狂揭秘读心操控
2340
助力苹果 Vision Pro等3D应用,鹅厂竟推出了这个软件?
6371
2022年1月,VR圈发生了这些值得关注的事……
6770
苹果2万亿美元市值一夜崩塌!AR/VR或是救命丸,最全头显爆料来了
5780
5.2 VR扫描:苹果Mac Pro新增VR/AR类别,三星或收购微型LED制造商
6050
从“嘿,Siri”到元宇宙,苹果还有多远距离要走?
2400
多次跳票的苹果VR/AR设备,究竟酝酿了哪些大招?
3310
相关推荐
3499美元的苹果MR头显来了!供应链曝光!国产厂商机会在哪?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验