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语句的更多相关文章

  1. PL/SQL与SQL(Oracle)Case语句

    (使用scott账户下的表) 1.Oracle SQL语句的case语句写法: --sql中的case用于分支判断并返回某个值. select empno , ename, deptno , case ...

  2. oracle数据库查询语句case的用法

    实现功能: 1.先查询status=2的记录,如果查询到记录则返回第一条记录的Product_Name:2.如果查询不到status=2的记录,则判断status=1的记录是否存在,不存在则返回“请耐 ...

  3. ORACLE PL/SQL 实例精解之第五章 条件控制:CASE语句

    5.1 CASE语句 1. CASE语句具有如下结构 CASE SELECTOR WHEN EXPRESSION 1 THEN STATEMENT 1; WHEN EXPRESSSION 2 THEN ...

  4. Oracle基础 各种语句的定义格式

    Oracle内建数据类型 一. 字符数据 1. char(size) 2. varchar2(size) 最常用,最大长度4000字节 3. nvhar(size).nvarchar(size) 4. ...

  5. Oracle基本流程语句

    ====1.IF语句==========

  6. oracle 常用sql语句

    oracle 常用sql语句 1.查看表空间的名称及大小 select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_sizefrom d ...

  7. Access、SQLServer、Oracle常见SQL语句应用区别

    Access.SQLServer.Oracle常见SQL语句应用区别 关劲松 PMP 如果要兼容Access.SQL Server.Oracle三个数据库版本:我们在编写SQL语句的过程中,尽量使用一 ...

  8. Oracle的sql语句的两种判断形式

    Oracle的sql语句的两种判断形式 判断当前列同时改动当前列 判断一个情况改动其他值 一类情况详解:实现的是当num这一列的值为3时,就显示好 以此类推 1)case num when 3 the ...

  9. SQL CASE语句的使用

    SQL CASE语句的使用 CASE是一个控制流语句,其作用与IF-THEN-ELSE语句非常相似,可根据数据选择值. CASE语句遍历条件并在满足第一个条件时返回值. 因此,一旦条件成立,它将短路, ...

随机推荐

  1. 初探Lambda表达式

    简单例子 Expression<Func<; 了解Net方法,没有比IL来得更加容易.反编译IL代码如下(截取部分显示) [] <<int32, bool>> ex ...

  2. How to Install JAVA 8 (JDK/JRE 8u111) on Debian 8 & 7 via PPA

    Oracle JAVA 8 Stable release has been released on Mar,18 2014 and available to download and install. ...

  3. Android ViewPager 用法

    Android ViewPager 用法 场景:一般第一次打开应用程序时,程序会有一个提示页来给展现应用程序都有哪些功能:或者程序更新时,又更新哪些新特性,都可以使用ViewPager Demo 描述 ...

  4. Android消息队列和Looper

    1. 什么是消息队列 消息队列在android中对应MessageQueue这个类,顾名思义,消息队列中存放了大量的消息(Message) 2.什么是消息 消息(Message)代表一个行为(what ...

  5. dojo分析之declare接口

    欢迎转载opendevkit文章, 文章原始地址: http://www.opendevkit.com/?e=57 declare接口是dojo定义类系统的关键函数, 类系统就是抽象,封装,继承.do ...

  6. Highcharts 饼图 文字颜色设置

    设置饼图对应的提示文字的颜色与饼图块状一样,demo如下: $(function () { $('#container').highcharts({ chart: { plotBackgroundCo ...

  7. storysnail的Windows串口编程笔记

    storysnail的Windows串口编程笔记 作者 He YiJun – storysnail<at>gmail.com 团队 ls 版权 转载请保留本声明! 本文档包含的原创代码根据 ...

  8. PHP版微信公共平台消息主动推送,突破订阅号一天只能发送一条信息限制

    2013年10月06日最新整理. PHP版微信公共平台消息主动推送,突破订阅号一天只能发送一条信息限制 微信公共平台消息主动推送接口一直是腾讯的私用接口,相信很多朋友都非常想要用到这个功能. 通过学习 ...

  9. wex5&.net开发

    一.环境开发 1.baas.net:菜单“窗口”->“首选项” 确定后左侧生成bass.net目录,设置iis网站目录(因为.net网站必须在iis中部署) 2.sqlserver:根据项目可选 ...

  10. 使用WPF动态生成Code 39条形码

    最近在看些条形码方面相关的资料,而如果只是看的话,效果似乎并不怎么好,所以决定动手做点Demo,以增强对相关知识的记忆. 这里是一个我编写的使用WPF生成Code 39的例子,Code 39的编码很简 ...