1、条件分支语句

在Oracle9i之前,执行条件分支操作都需要使用IF语句来完成,并且PL/SQL中,提供了三种条件分支语句:IF-THEN、IF-THEN-ELSE、IF-THEN-ELSIF.具体的语法如下:

IF condition THEN
statements;
[ELSIF condition THEN
statements;]
[ELSE
statements ;]
END IF;

注意:ELSIF 是一个单词, END IF 是两个单词 .

下面分别用代码来示例这三种条件的判断:

1.1 简单条件判断 :

如上图所示,当使用简单条件判断时,如果condition 为TRUE,那么PL/SQL执行器会执行THEN后的操作;如果conditon为FALSE或NULL,那么PL/SQL执行器会直接退出条件分支语句。示例如下:

DECLARE
v_sal NUMBER(6,2);
BEGIN
SELECT sal INTO v_sal FROM emp
WHERE lower(ename)=lower('&name');
IF v_sal<2000 THEN
UPDATE emp SET sal=v_sal+200
WHERE lower(ename)=lower('&name');
END IF;
END;

1.2二重条件分支

示例如下:

DECLARE
v_comm number(6,2);
BEGIN
SELECT comm INTO v_comm
FROM emp
where empno=&no;
IF v_comm<>0 THEN
UPDATE emp set comm=v_comm+100
where empno=&no;
ELSE
UPDATE emp set comm=200
where empno=&no;
END IF;
END;

1.3多重条件分支

示例如下:

DECLARE
v_job VARCHAR2(10);
v_sal NUMBER(6,2);
BEGIN
SELECT job,sal INTO v_job,v_sal
FROM emp
WHERE empno=&no;
IF v_job='PRESIDENT' THEN
UPDATE emp SET sal=v_sal+1000 where empno=&no;
ELSIF v_job='MANAGER' THEN
UPDATE emp SET sal=v_sal+500 where empno=&no;
ELSE
UPDATE emp SET sal=v_sal+200 where empno=&no;
END IF;
END;

2.CASE 语句

从Oracle 9i 开始,不仅可以使用IF语句执行多重条件分支操作,也可以使用CASE语句执行多重条件分支操作。当处理多重条件分支时,使用CASE语句更加敏捷而且执行效率更好,所以建议大家使用CASE语句。使用CASE语句执行多重条件分支时,有两种方法,第一种方法是使用单一选择符进行等值比较;第二种方法是使用多种条件进行非等值比较。

2.1 在 CASE语句中使用单一选择符进行等值比较

当使用CASE语句执行多重条件分支时,如果条件选择符完全相同,并且条件表达式为相等条件选择,那么可以选择进行单一条件选择符进行等值比较。语法如下:

CASE selector
WHEN expression1 THEN sequence_of_statements1;
WHEN expression2 THEN sequence_of_statements1;
...
WHEN expressionN THEN sequence_of_statementsN;
[ELSE sequence_of_statementsN+1;]
END CASE;

字段说明:selectotor 用于指定条件选择符;

expression 用于指定条件表达式;

sequence_of_statements  用于指定要执行的条件操作;

如果设置的所有条件都不满足,则会执行ELSE后的语句;注意:为了避免CASE_NOT_FOUND例外,在编写CASE语句时,应该带有ELSE子句。示例如下:

DECLARE
v_deptno emp.deptno%TYPE;
BEGIN
v_deptno:=&no;
CASE v_deptno
WHEN 10 THEN
UPDATE emp SET comm=100 WHERE deptno=v_deptno;
WHEN 20 THEN
UPDATE emp SET comm=200 WHERE deptno=v_deptno;
WHEN 30 THEN
UPDATE emp SET comm=300 WHERE deptno=v_deptno;
ELSE
dbms_output.put_line('不存在该部门');
END CASE;
END;

2.2 在CASE语句中使用多种条件比较

当使用单一条件选择符进行等值比较时,可以使用CASE selector 语法来实现。如果包含有多种条件进行不等值比较,那么必须在WHEN子句中指定比较条件。语法如下:

CASE
WHEN search_condition1 THEN sequence_of_statements1;
WHEN search_condition2 THEN sequence_of_statements2;
...
WHEN search_conditionN THEN sequence_of_statementsN;
[ELSE sequence_of_statementsN+1;]
END CASE;

字段说明:serach_condition 用于指定不同的比较条件

sequence_of_statemets 用于指定满足特定条件时要指定的操作

示例如下:

DECLARE
v_sal emp.sal%TYPE;
v_ename emp.ename%TYPE;
BEGIN
SELECT sal,ename INTO v_sal,v_ename
FROM emp
WHERE
empno=&no;
CASE
WHEN v_sal <1000 THEN
UPDATE emp SET comm=100 WHERE ename =v_ename;
WHEN v_sal<2000 THEN
UPDATE emp SET comm=200 WHERE ename=v_ename;
WHEN v_sal<6000 THEN
UPDATE emp SET comm=400 WHERE ename=v_ename;
END CASE;
END;

Oracel 编写控制结构的更多相关文章

  1. Oracle之PL/SQL学习笔记

    自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整理了一下,给大家分享,有不足之处还望大家 ...

  2. oracle 10g编程

    一.概述 1.sql语言特点 sql语言采用集合操作方式,对数据的处理是成组进行的,而不是一条一条处理,听过使用集合操作方式,可以家加快数据的处理速度. 执行sql语句时每次只能发送并处理一条语句.如 ...

  3. ICE学习第三步-----Slice语言

    ICE:Slice语言(一)-编译 Introduce简介 Slice(Specification language for ice)是分离对象和对象的实现的基础的抽象机制.Slice在客户端和服务器 ...

  4. plsql使用

    本文由jay8605162432贡献 本课重点: 1.写 SELECT 语句进行数据库查询 2.进行数学运算 3.处理空值 4.使用别名 ALIASES 5.连接列 6.在 SQL PLUS 中编辑缓 ...

  5. PLSQL学习教程(全)

    基于ORACLE9i+PL/SQLDeveloper7.1.4) 课程 一 PL/SQL 基本查询与排序 本课重点: 1.写SELECT语句进行数据库查询 2.进行数学运算 3.处理空值 4.使用别名 ...

  6. plsql oracle 使用教程

    课程 一 PL/SQL 基本查询与排序 本课重点: 1.写SELECT语句进行数据库查询 2.进行数学运算 3.处理空值 4.使用别名ALIASES 5.连接列 6.在SQL PLUS中编辑缓冲,修改 ...

  7. PL SQL 基础

    Oracle之PL/SQL学习笔记   自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整 ...

  8. PL/SQL基础知识

    Oracle之PL/SQL学习笔记 自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整理了 ...

  9. scala中如何编写自定义的流程控制结构

    scala是一种函数式编程风格的语言,除了常见的if......else  ,for ,while等传统的流程控制结构,也可以自定义流程控制的控制结构. 再了解scala如何实现编写新的流程结构,我们 ...

随机推荐

  1. 即时通讯软件openfire+spark+smack

    所以我基本上分为三篇文章来介绍此类软件的开发: 第一篇是关于XMPP 协议是啥,IM 是啥以及一个比较有名的开源实现,该开源实现包括三个部分(Spark.Smack和Openfire): 第二篇讲如何 ...

  2. 安卓高仿QQ头像截取升级版

    观看此篇文章前,请先阅读上篇文章:高仿QQ头像截取: 本篇之所以为升级版,是在截取头像界面添加了与qq类似的阴影层(裁剪区域以外的部分),且看效果图:   为了适应大家不同需求,这次打了两个包,及上图 ...

  3. 1091. Acute Stroke (30)

    题目如下: One important factor to identify acute stroke (急性脑卒中) is the volume of the stroke core. Given ...

  4. Eclipse中如何快速查看jar包中 的class源码

    我们查看jar源码时,一般是安装个jd-gui,把jar拷出来,然后从jd-gui中打开jar再查看源码,这个过程不免有些麻烦,当然,本篇所讲的快速查看的方法也没什么高科技手段,只是将jd-gui集成 ...

  5. java 之容器

    在Java中,我们想要保存对象可以使用很多种手段.我们之前了解过的数组就是其中之一.但是数组具有固定的尺寸,而通常来说,程序总是在运行时根据条件来创建对象,我们无法预知将要创建对象的个数以及类型,所以 ...

  6. 关于android app签名文件获取sha1和MD值

    最近在做百度地图的嵌入,因为从同事接手的android app,所以第一次接触android的签名. 总的来说签名还比较简单,我用的是eclipse ADT自带的签名工具来做的签名,方法如下: 选择项 ...

  7. volatile实现可见性但不保证原子性

    volatile实现可见性但不保证原子性 volatile关键字: 能够保证volatile变量的可见性 不能保证volatile变量复合操作的原子性 volatile如何实现内存可见性: 深入来说: ...

  8. 《java入门第一季》之泛型引入

    泛型的引入: 首先看一段代码体会自动报错. // 看下面这个代码 自动报错 String[] strArray = new String[3]; strArray[0] = "hello&q ...

  9. 打包自己的aar库

    在比较大的 Android 项目的开发中,我们经常会遇到工程.jar 包等等之间相互引用的方式.一般我们通过在 gradle 文件中配置依赖来解决,但是如果通过include的方式来引入第三方库的时候 ...

  10. 分布式系统中的RPC请求经常出现乱序的情况 写一个算法来将一个乱序的序列保序输出

    分布式系统中的RPC请求经常出现乱序的情况.  写一个算法来将一个乱序的序列保序输出.例如,假设起始序号是1,对于(1, 2, 5, 8, 10, 4, 3, 6, 9, 7)这个序列,输出是:  1 ...