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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/840854.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从参数变化解读 MySQL 8.2.0 发版说明

↑ 关注“少安事务所”公众号&#xff0c;欢迎⭐收藏&#xff0c;不错过精彩内容~ 日前&#xff0c;MySQL 8.2.0 创新版本已正式上线&#xff0c;并提供安装包下载&#xff0c;但 docker 镜像尚未更新。 在 MySQL 8.1.0 刚发版时也做过分析&#xff0c;欢迎阅读&#xff1a; 重…

vue框架学习 -- 跨域问题解决之 proxy 配置

在Vue.js项目中&#xff0c;为了在开发环境下解决跨域问题&#xff0c;我们可以利用 vue.config.js 文件中的 devServer.proxy 配置来设置一个代理服务器。这个代理服务器会拦截特定的请求&#xff0c;并将其转发到目标后端服务器。 以下是一个基本的proxy配置详解&#xff1a;…

区块链技术和应用

文章目录 前言 一、区块链是什么&#xff1f; 二、区块链核心数据结构 2.1 交易 2.2 区块 三、交易 3.1 交易的生命周期 3.2 节点类型 3.3 分布式系统 3.4 节点数据库 3.5 智能合约 3.6 多个记账节点-去中心化 3.7 双花问题 3.8 共识算法 3.8.1 POW工作量证明 总结 前言 学习长…

Drone+Gitee自动执行构建、测试和发布工作流

拉取Drone:(至于版本&#xff0c;你可以下载最新的) sudo docker pull drone/drone:2 拉取runner&#xff1a; sudo docker pull drone/drone-runner-docker 在Gitee中添加第三方应用&#xff1a; 进入个人主页&#xff0c;点击设置&#xff1a; 往下翻&#xff0c;找到数…

前缀和,差分算法理解

前缀和是什么&#xff1a; 前缀和指一个数组的某下标之前的所有数组元素的和&#xff08;包含其自身&#xff09;。前缀和分为一维前缀和&#xff0c;以及二维前缀和。前缀和是一种重要的预处理&#xff0c;能够降低算法的时间复杂度 说个人话就是比如有一个数组&#xff1a; …

H3CNE-6-ICMP数据包分析

ICMP&#xff1a;Internet Control Message Protocol ICMP用来传递差错、控制、查询等信息 Wireshark抓包 Wireshark下载国内镜像 ICMP数据包格式 Type&#xff1a;表示ICMP消息类型 Code&#xff1a;表示同一消息类型中的不同信息 ICMP消息类型和编码类型 ICMP应用 &…

Java 反射基础

概述 Java反射&#xff08;Reflection&#xff09;是Java编程语言的一个特性&#xff0c;它允许在运行时对类、接口、字段和方法进行动态查询和操作。反射提供了一种在运行时查看和修改程序行为的能力&#xff0c;这通常用于实现一些高级功能&#xff0c;如框架、ORM&#xff…

亚马逊开店详细教程(6)- 获得商品的评分

1. 为什么要参加 VINE计划 用户在浏览一个新上架的商品时&#xff0c;通常会参照以往买家的对商品的评论&#xff0c;如果你是新全的商品可能没有任何评论信息&#xff0c;这可以会让一部分用户对购买产品有所顾虑&#xff0c;参加亚马逊Vine计划能够帮助新产品快速获得高质量…

vue实现esc关闭div弹窗的自定义指令

弹窗是 div 实现的&#xff08;非el-dialog&#xff09;,效果&#xff1a;按下esc&#xff0c;关闭弹窗 directive/divEscClose/divEscClose.js export default {bind: function (el, binding, vnode) {let keydownHandler; ​const closeModal () > {if (typeof binding.…

【MySQL精通之路】SQL优化(1)-查询优化

SQL优化方案主博客&#xff1a; 【MySQL精通之路】SQL优化(1)-CSDN博客 SELECT查询优化&#xff1a; 以下优化都由MySQL查询优化器自动进行了处理。我们了解的过程中需要知道我们如何编写SQL以使优化器可以优化我们的查询语句。 之所以分成多博客发布&#xff0c;主要是为了…

2024年山东省安全员C证证考试题库及山东省安全员C证试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年山东省安全员C证证考试题库及山东省安全员C证试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特种设备作业人员上岗证考试大…

【Spring MVC】_SpringMVC项目返回数据

目录 1. 注解使用示例 1.1 使用Controller注解 1.2 使用RestController注解 1.3 使用Controller与ResponseBody注解 2. 关于ResponseBody注解 前文已经介绍过使用Controller注解向前端返回一个HTML页面&#xff0c;接下来将介绍向前端返回数据。 关于Controller和RestCon…

QT Qstring转QJson转QbyteArray

QT5.15 QT Qstring转QJson //读取json格式文件 // QByteArray json http_recv_str.toLatin1();//字符串转字节 QByteArray json http_recv_str.toUtf8().data(); //信息带中文&#xff0c;则需要toUtf8() //QByteArray json http_recv_str.toLocal8Bit().data();//…

Volatile的内存语义

1、volatile的特性 可见性&#xff1a;对一个volatile变量的读&#xff0c;总能够看到任意一个线程对这个volatile变量的写入。 原子性&#xff1a;对任意单个volatile变量的读/写具有原子性&#xff0c;但类似于volatile这种复合操作不具有原子性。 接下来我们用程序验证。…

独享IP是原生IP吗?

原生IP&#xff1a; 原生IP是指由Internet服务提供商&#xff08;ISP&#xff09;直接分配给用户的IP地址&#xff0c;这些IP地址通常反映了用户的实际地理位置和网络连接。原生IP是用户在其所在地区或国家使用的真实IP地址&#xff0c;与用户的物理位置直接相关。在跨境电商中…

设置height:100%不生效的原因

之前网课案例总是不屑于去看&#xff0c;因为总觉得太花时间&#xff0c;但是不可否认的是&#xff0c;认真去看还是会有收获的&#xff0c;而且常有意外收获 昨天在看实现动画效果的综合案例中&#xff0c;意外解决了我长久以来的一个疑问&#xff1a;为什么给元素设置height…

java在类的定义中创建自己的对象?

当在main方法中新建自身所在类的对象&#xff0c;并调用main方法时&#xff0c;会不断循环调用main方法&#xff0c;直到栈溢出 package com.keywordStudy;public class mainTest {static int value 33;public static void main(String[] args) throws Exception{String[] sn…

Python并发编程:多线程

前序博客中已经介绍了基于多进程的并发编程&#xff0c;本篇主要介绍基于多线程的并发编程。 1 全局解释锁 1.1 定义 全局解释锁(Global Interpreter Lock&#xff0c;简称GIL)是Python(特别是CPython)解释器中的一个机制&#xff0c;这个机制会限制同一时间只有一个线程执行P…

啥?题目是认真的么?啥大模型开源还是闭源,这就是个驳论!

开源大模型与闭源大模型&#xff0c;你更看好哪一方&#xff1f; 简介&#xff1a;评价一个AI模型“好不好”“有没有发展”&#xff0c;首先就躲不掉“开源”和“闭源”两条发展路径。对于这两条路径&#xff0c;你更看好哪一种呢&#xff1f; 其实我认为2者之间压根没啥好纠…

Java队列简介

在现代应用程序开发中&#xff0c;队列是一种常见且强大的数据结构&#xff0c;用于存储和管理待处理的任务序列。结合MySQL数据库&#xff0c;我们可以利用队列实现任务的持久化存储与高效处理。本文将通过四个案例&#xff0c;详细介绍如何在Java中使用队列&#xff0c;并结合…