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. datax+hadoop2.X兼容性调试

    以hdfsreader到hdfswriter为例进行说明: 1.datax的任务配置文件里需要指明使用的hadoop的配置文件,在datax+hadoop1.X的时候,可以直接使用hadoop1.X/ ...

  2. easyui 》 radio取值,checkbox取值,select取值,radio选中,checkbox选中,select选中

    获取一组radio被选中项的值var item = $('input[@name=items][@checked]').val();获取select被选中项的文本var item = $(" ...

  3. Software Testing hw3

    (a):可绘制出如下图所示的流程图 (b):对于测试用例t1=(n=3)和t2=(n=5),MAXPRIMES = 4时,t1不能检查出错误,而t2则会发生数组越界错. (c):要使测试路径不通过wh ...

  4. 【Java】深深跪了,OJ题目Java与C运行效率对比(附带清华北大OJ内存计算的对比)

    看了园友的评论之后,我也好奇清橙OJ是怎么计算内存占用的.重新测试的情况附在原文后边. -------------------------------------- 这是切割线 ----------- ...

  5. docker pull certification error

    export DOMAIN_NAME=<my-dtr-domain> echo -n | openssl s_client -showcerts -connect itapregistry ...

  6. 关于placeholder中 文字添加换行 用转义字符&#13;&#10;代替<br>

    今天遇到一个问题 UI给的效果图中 文本域的提示文字 是两行显示, 于是就想到placeholder中能否解析html标签, 尝试后发现并无卵用, 经过调查后发现 可以用转义字符代替<br> ...

  7. 工作当中实际运用(1)——tab选项卡

    不废话 直接上代码: tab选项卡 window.onload=function(){ var titles= document.getElementById('header-dh').getElem ...

  8. ABP入门系列(3)——领域层创建实体

    这一节我们主要和领域层打交道.首先我们要对ABP的体系结构以及从模板创建的解决方案进行一一对应.网上有代码生成器去简化我们这一步的任务,但是不建议初学者去使用. 一.首先来看看ABP体系结构 领域层就 ...

  9. 我的ORM之五-- 事务

    我的ORM索引 单库事务与分布式事务 单库事务: 性能更好,应用于一个数据库时的场景,当数据库发生变化,如拆分为多个服务器,代码需要修改. 分布式事务:性能相对较差,但有更大的适用场景.当数据库发生变 ...

  10. openfire/spark/asmack 环境调试纪要

    项目需要简单搭建openfire/spark/asmack的环境及程序demo,本文简单记录以免遗忘. 1.openfire/spark 是java编写的xmpp服务器及PC客户端,安装过程相当简单一 ...