Oracle IF & CASE语句
IF语句主要有以下三种基本形式:
一、 IF-THEN语句
IF CONDITION THEN
STATEMENT 1;
...
STATEMENT N;
END IF;
二、 IF-THEN-ELSE语句
IF CONDITION THEN
STATEMENT 1;
ELSE
STATEMENT 2;
END IF;
三、 ELSLF语句
IF CONDITION 1 THEN
STATEMENT 1;
ELSIF CONDITION 2 THEN
STATEMENT 2;
ELSIF CONDITION 3 THEN
STATEMENT 3;
...
ELSE
STATEMENT N; -->>在ELSIF语句中,ELSE子句并不是必需的
END IF
下面,试举一例:用SYSDATE函数判断今天是否是周末,如果是周末的话,判断现在是上午还是下午。无论是否是周末,最后均显示日期。
注意:IF的嵌套用法和在ELSIF语句中,ELSE子句并不是必需的
DECLARE
v_day varchar2(10);
v_time number(2);
BEGIN
v_day := RTRIM(to_char(sysdate,'DAY'));
v_time := to_char(sysdate,'hh24');
IF v_day in ('SATURDAY','SUNDAY') THEN -->>下面嵌套了一个ELSIF语句
IF v_time >= 6 AND v_time <12 THEN
DBMS_OUTPUT.PUT_LINE('Good Moring');
ELSIF v_time >=12 AND v_time <=18 THEN
DBMS_OUTPUT.PUT_LINE('Good Afternoon');
END IF;
END IF;
DBMS_OUTPUT.PUT_LINE('The time is: '||to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'));
END;
CASE语句
CASE语句存在两种形式:CASE和搜索式CASE。
一、 CASE语句
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;
下面,试举一例:用于判断输入数值的奇偶性。
DECLARE
v_num NUMBER := &user_num;
v_num_flag NUMBER;
BEGIN
v_num_flag := MOD(v_num,2);
CASE v_num_flag
WHEN 0 THEN
DBMS_OUTPUT.PUT_LINE(v_num||' is even number');
ELSE
DBMS_OUTPUT.PUT_LINE(v_num||' is odd number');
END CASE;
END;
二、 搜索式CASE语句
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语句重写上例 -->> 注意:没有声明v_num_flag变量,直接在WHEN中判断
DECLARE
v_num NUMBER := &user_num;
BEGIN
CASE
WHEN MOD(v_num,2)=0 THEN
DBMS_OUTPUT.PUT_LINE(v_num||' is even number');
ELSE
DBMS_OUTPUT.PUT_LINE(v_num||' is odd number');
END CASE;
END;
CASE表达式
倘若是使用CASE表达式,上述CASE语句和搜索式CASE语句可分别重写如下:
一、 对应CASE语句
DECLARE
v_num NUMBER := &user_num;
v_num_flag number;
v_result varchar2(30);
BEGIN
v_num_flag := MOD(v_num,2);
v_result :=
CASE v_num_flag
WHEN 0 THEN
v_num||' is even number'
ELSE
v_num ||' is odd number'
END;
DBMS_OUTPUT.PUT_LINE(v_result);
END;
二、 对应搜索式CASE语句
DECLARE
v_num NUMBER := &user_num;
v_result varchar2(30);
BEGIN
v_result :=
CASE
WHEN MOD(v_num,2) = 0 THEN
v_num||' is even number'
ELSE
v_num ||' is odd number'
END;
DBMS_OUTPUT.PUT_LINE(v_result);
END;
注意:CASE语句和CASE表达式之间的语法区别:在CASE语句中,WHEN和ELSE子句中的可执行语句以分号结尾。而在CASE表达式中,WHEN和ELSE子句所包含的表达式的结尾处不是分号。CASE语句以END CASE终止,CASE表达式以END结尾。
CASE表达式常用于SELECT INTO语句中,试举一例:
DECLARE
v_sal_level varchar2(10);
v_empno number(4) :=&empno;
v_name varchar2(10);
BEGIN
SELECT ename,
CASE
WHEN sal >= 3000 THEN 'high'
WHEN sal >= 1000 THEN 'medium'
ELSE 'low'
END
INTO v_name,v_sal_level
FROM emp
WHERE EMPNO = v_empno;
DBMS_OUTPUT.PUT_LINE(v_name||' salary is '||v_sal_level);
END;
Oracle IF & CASE语句的更多相关文章
- PL/SQL与SQL(Oracle)Case语句
(使用scott账户下的表) 1.Oracle SQL语句的case语句写法: --sql中的case用于分支判断并返回某个值. select empno , ename, deptno , case ...
- oracle数据库查询语句case的用法
实现功能: 1.先查询status=2的记录,如果查询到记录则返回第一条记录的Product_Name:2.如果查询不到status=2的记录,则判断status=1的记录是否存在,不存在则返回“请耐 ...
- ORACLE PL/SQL 实例精解之第五章 条件控制:CASE语句
5.1 CASE语句 1. CASE语句具有如下结构 CASE SELECTOR WHEN EXPRESSION 1 THEN STATEMENT 1; WHEN EXPRESSSION 2 THEN ...
- Oracle基础 各种语句的定义格式
Oracle内建数据类型 一. 字符数据 1. char(size) 2. varchar2(size) 最常用,最大长度4000字节 3. nvhar(size).nvarchar(size) 4. ...
- Oracle基本流程语句
====1.IF语句==========
- oracle 常用sql语句
oracle 常用sql语句 1.查看表空间的名称及大小 select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_sizefrom d ...
- Access、SQLServer、Oracle常见SQL语句应用区别
Access.SQLServer.Oracle常见SQL语句应用区别 关劲松 PMP 如果要兼容Access.SQL Server.Oracle三个数据库版本:我们在编写SQL语句的过程中,尽量使用一 ...
- Oracle的sql语句的两种判断形式
Oracle的sql语句的两种判断形式 判断当前列同时改动当前列 判断一个情况改动其他值 一类情况详解:实现的是当num这一列的值为3时,就显示好 以此类推 1)case num when 3 the ...
- SQL CASE语句的使用
SQL CASE语句的使用 CASE是一个控制流语句,其作用与IF-THEN-ELSE语句非常相似,可根据数据选择值. CASE语句遍历条件并在满足第一个条件时返回值. 因此,一旦条件成立,它将短路, ...
随机推荐
- PADSPCB权威指南-第三章 预处理(部分)(原创)
PADSPCB权威指南-第三章(部分)豆丁地址:http://www.docin.com/p-707132066.html
- C++混合编程之idlcpp教程Python篇(9)
上一篇在这 C++混合编程之idlcpp教程Python篇(8) 第一篇在这 C++混合编程之idlcpp教程(一) 与前面的工程相比,工程PythonTutorial7中除了四个文件PythonTu ...
- Anciroid的IPC机制-Binder概述
在Linux系统中,是以进程为单位分配和管理资源的.出于保护机制,一个进程不能直接访问另一个进程的资源,也就是说,进程之间互相封闭.但是,在一个复杂的应用系统中,通常会使用多个相关的进程来共同完成一项 ...
- android user build serial console
在 init.rc 里有一段 on property:ro.debuggable=1 start console 当user debug时 ro.debuggable=0,console 不会被启动 ...
- Linux下添加新硬盘,分区及挂载(转)
挂载好新硬盘后输入fdisk -l命令看当前磁盘信息,卸载硬盘分区 umount /dev/sdb 可以看到除了当前的第一块硬盘外还有一块sdb的第二块硬盘,然后用fdisk /dev/sdb 进行分 ...
- NetMq学习--发布订阅(一)
基于NeqMq 4.0.0-rc5版本发布端: using (var publisher = new PublisherSocket()) { publisher.Bind("tcp://* ...
- Java IO1:IO和File
IO 大多数的应用程序都要与外部设备进行数据交换,最常见的外部设备包含磁盘和网络.IO就是指应用程序对这些设备的数据输入与输出,Java语言定义了许多类专门负责各种方式的输入.输出,这些类都被放在ja ...
- 人人都是 DBA(XIV)存储过程信息收集脚本汇编
什么?有个 SQL 执行了 8 秒! 哪里出了问题?臣妾不知道啊,得找 DBA 啊. DBA 人呢?离职了!!擦!!! 程序员在无处寻求帮助时,就得想办法自救,努力让自己变成 "伪 DBA& ...
- SQL 行列倒置
SQL的的行列倒置已经不是新知识了,但在博主的技术咨询期间,仍发现其实有很多人并不了解这块,所以在此专门写一篇博客记录.本文将以Mysql为例,并以数据采集指标信息获取为例子.在下面的例子,你可以在s ...
- Android怎么找到最优适配资源
当我们将一些提供了不同的资源文件可供Android系统选择的时候,Android会在运行时会根据一套适配的规则选择最符合当前配置的资源.为了说明Android怎么选择资源,假设我们有以下可选的资源文件 ...