当前位置: 首页 > news >正文

Oracle23ai新特性case when子句增加多条件判断

Oracle23ai新特性case when子句增加多条件判断,语句更加灵活易用,更好支持SQL标准。

参考官方文档 CASE Expressions

https://docs.oracle.com/en/database/oracle/oracle-database/23/lnpls/plsql-language-fundamentals.html#GUID-216F1B33-493F-4CDE-93BB-096BACA8523E

1、本文内容

  • 新特性在Oracle23ai中简单使用
  • 通用所有版本的基础写法

2、Oracle23ai新特性case when子句多条件判断

2.1、测试实例

TESTUSER@FREEPDB1> select EMPLOYEE_ID,FIRST_NAME,SALARY from employees where rownum<=10;EMPLOYEE_ID FIRST_NAME                                                       SALARY
----------- ------------------------------------------------------------ ----------100 Steven                                                            24000101 Neena                                                             17000102 Lex                                                               17000103 Alexander                                                          9000104 Bruce                                                              6000105 David                                                              4800106 Valli                                                              4800107 Diana                                                              4200108 Nancy                                                             12008109 Daniel                                                             9000
-- 第一种使用游标
declare ISFlag varchar2(32);
beginfor cur_case_when_new  in ( select EMPLOYEE_ID,FIRST_NAME,SALARY from employees where rownum<=10) loopISFlag :=case cur_case_when_new.SALARYWHEN >13000 THEN 'high'WHEN 9000, 12008 THEN 'normal'WHEN 4800,4200,6000 THEN 'low'ELSE 'executive pay'end;dbms_output.put_line('员工编号:'||cur_case_when_new.EMPLOYEE_ID || '姓名:' ||cur_case_when_new.FIRST_NAME || ' 工资级别:' ||ISFlag);end loop;  
end;
/
-- Result:
员工编号:100 姓名:Steven 工资级别:high
员工编号:101 姓名:Neena 工资级别:high
员工编号:102 姓名:Lex 工资级别:high
员工编号:103 姓名:Alexander 工资级别:normal
员工编号:104 姓名:Bruce 工资级别:low
员工编号:105 姓名:David 工资级别:low
员工编号:106 姓名:Valli 工资级别:low
员工编号:107 姓名:Diana 工资级别:low
员工编号:108 姓名:Nancy 工资级别:normal
员工编号:109 姓名:Daniel 工资级别:normal-- 第二种使用with function 子句
with function get_level(P_SALARY in number) return varchar2
is  beginreturn case P_SALARYWHEN >13000 THEN 'high'WHEN 9000, 12008 THEN 'normal'WHEN 4800,4200,6000 THEN 'low'ELSE 'executive pay'end;end;select EMPLOYEE_ID,FIRST_NAME,SALARY,get_level(SALARY) as ISFlag from employees where rownum<=10;/EMPLOYEE_ID FIRST_NAME                         SALARY ISFLAG
----------- ------------------------------ ---------- ------------------------------100 Steven                              24000 high101 Neena                               17000 high102 Lex                                 17000 high103 Alexander                            9000 normal104 Bruce                                6000 low105 David                                4800 low106 Valli                                4800 low107 Diana                                4200 low108 Nancy                               12008 normal109 Daniel                               9000 normal
-- 以上两种PL/SQL写法都是Oracle23ai新特性支持,之前版本Oracle19c/12c/11g都无法使用

2.2、Oracle23ai/19c/12c/11g同时支持语句

 select EMPLOYEE_ID,FIRST_NAME,SALARY,CASE WHEN SALARY >13000 THEN 'high'WHEN SALARY>=9000 and SALARY<=12008 THEN 'normal'WHEN SALARY>=4200 and SALARY<=6000 THEN 'low'ELSE 'executive pay' end as ISFlag from employees where rownum<=10;-- Result:
EMPLOYEE_ID FIRST_NAME                         SALARY ISFLAG
----------- ------------------------------ ---------- ------------------------------100 Steven                              24000 high101 Neena                               17000 high102 Lex                                 17000 high103 Alexander                            9000 normal104 Bruce                                6000 low105 David                                4800 low106 Valli                                4800 low107 Diana                                4200 low108 Nancy                               12008 normal109 Daniel                               9000 normal10 rows selected.

2.2、官方示例

DECLAREsalary NUMBER := 7000;salary_level VARCHAR2(20);
BEGINsalary_level :=CASE salaryWHEN 1000, 2000 THEN 'low'WHEN 3000, 4000, 5000 THEN 'normal'WHEN 6000, 7000, 8000 THEN 'high'ELSE 'executive pay'END;DBMS_OUTPUT.PUT_LINE('Salary level is: ' || salary_level);
END;
/-- Result:
Salary level is: high
DECLAREdata_val NUMBER := 30;status VARCHAR2(20);
BEGINstatus :=CASE data_val/2WHEN < 0, > 50 THEN 'outlier'WHEN BETWEEN 10 AND 30 THEN 'good'ELSE 'bad'END;DBMS_OUTPUT.PUT_LINE('The data status is: ' || status);
END;
/-- Result:
The data status is: good

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【机器学习】机器学习与大型预训练模型的前沿探索:跨模态理解与生成的新纪元
  • 【Kotlin 一】Kotlin入门知识简介、变量声明、数字类型
  • C++—数组
  • 基于DdddOcr通用验证码离线本地识别SDK搭建个人云打码接口Api
  • Volatile的内存语义
  • 基于地理坐标的高阶几何编辑工具算法(4)——线分割面
  • 一周开发一个在线客服系统
  • 实现信号发生控制
  • IDEA中一些常见操作【持续更新】
  • echarts-树图、关系图、桑基图、日历图
  • C++ Primer (第五版)第九章习题部分答案
  • 【openpcdet中yaml文件的DATA_AUGMENTOR学习】
  • vue...
  • 二叉树基于队列实现的操作详解
  • python梯度下降法求解三元线性回归系数,并绘制结果
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • AngularJS指令开发(1)——参数详解
  • es6要点
  • idea + plantuml 画流程图
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • sublime配置文件
  • Vue2.0 实现互斥
  • 简单数学运算程序(不定期更新)
  • 前端面试之CSS3新特性
  • 少走弯路,给Java 1~5 年程序员的建议
  • 时间复杂度与空间复杂度分析
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 通过git安装npm私有模块
  • 一文看透浏览器架构
  • 移动端 h5开发相关内容总结(三)
  • 智能网联汽车信息安全
  • 主流的CSS水平和垂直居中技术大全
  • 阿里云API、SDK和CLI应用实践方案
  • ​卜东波研究员:高观点下的少儿计算思维
  • ​香农与信息论三大定律
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • #QT(TCP网络编程-服务端)
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (动态规划)5. 最长回文子串 java解决
  • (论文阅读40-45)图像描述1
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (四)c52学习之旅-流水LED灯
  • *** 2003
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .NET C# 使用GDAL读取FileGDB要素类
  • .net 简单实现MD5
  • .NET 通过系统影子账户实现权限维持
  • .Net6 Api Swagger配置
  • .NET8使用VS2022打包Docker镜像
  • .NET程序员迈向卓越的必由之路
  • .net解析传过来的xml_DOM4J解析XML文件