Oracel 编写控制结构
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 编写控制结构的更多相关文章
- Oracle之PL/SQL学习笔记
自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整理了一下,给大家分享,有不足之处还望大家 ...
- oracle 10g编程
一.概述 1.sql语言特点 sql语言采用集合操作方式,对数据的处理是成组进行的,而不是一条一条处理,听过使用集合操作方式,可以家加快数据的处理速度. 执行sql语句时每次只能发送并处理一条语句.如 ...
- ICE学习第三步-----Slice语言
ICE:Slice语言(一)-编译 Introduce简介 Slice(Specification language for ice)是分离对象和对象的实现的基础的抽象机制.Slice在客户端和服务器 ...
- plsql使用
本文由jay8605162432贡献 本课重点: 1.写 SELECT 语句进行数据库查询 2.进行数学运算 3.处理空值 4.使用别名 ALIASES 5.连接列 6.在 SQL PLUS 中编辑缓 ...
- PLSQL学习教程(全)
基于ORACLE9i+PL/SQLDeveloper7.1.4) 课程 一 PL/SQL 基本查询与排序 本课重点: 1.写SELECT语句进行数据库查询 2.进行数学运算 3.处理空值 4.使用别名 ...
- plsql oracle 使用教程
课程 一 PL/SQL 基本查询与排序 本课重点: 1.写SELECT语句进行数据库查询 2.进行数学运算 3.处理空值 4.使用别名ALIASES 5.连接列 6.在SQL PLUS中编辑缓冲,修改 ...
- PL SQL 基础
Oracle之PL/SQL学习笔记 自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整 ...
- PL/SQL基础知识
Oracle之PL/SQL学习笔记 自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整理了 ...
- scala中如何编写自定义的流程控制结构
scala是一种函数式编程风格的语言,除了常见的if......else ,for ,while等传统的流程控制结构,也可以自定义流程控制的控制结构. 再了解scala如何实现编写新的流程结构,我们 ...
随机推荐
- Sharing The Application Tier File System in Oracle E-Business Suite Release 12.2
The most current version of this document can be obtained in My Oracle Support Knowledge Document 13 ...
- android studio——Failed to set up SDK
最近使用android studio ,在IDE里面使用Gradle构建的时候,一直出现构建失败,失败信息显示Failed to set up SDK.然后 提示无法找到andriod-14平台,我更 ...
- ffmpeg.c函数结构简单分析(画图)
前一阵子研究转码的时候看了FFmpeg的源代码.由于ffmpeg.c的代码相对比较长,而且其中有相当一部分是AVFilter有关的代码(这一部分一直不太熟),因此之前学习FFmpeg的时候一直也没有好 ...
- UNIX环境高级编程——system V信号量
1. 信号量(semaphore)主要用于保护临界资源.进程可以根据它判断是否能访问某些共享资源.信号量除了用于访问控制外,还可用于进程同步,也就是进程间通信.2. 信号量分类:a. 二值信号量: 信 ...
- ADFS3.0 Customizing the AD FS Sign-in Pages
Windows Server2012R2自带的adfs是3.0的版本,不同于以前的版本的是3.0中登陆页面的定制化全部是通过powershell指令实现,官方的介绍链接如下:http://techne ...
- postman使用—chrome版
如果大家不知道怎么安装,请下载个FQ软件(蓝灯,shadowsocks)都是可以的,安装完成之后,你可以在chrome看到posman的插件程序. 使用说明: 安装完成之后,使用chrome://ap ...
- Unable to handle 'index' format version '2', please update rosdistro的解决办法
之前安装的ROS是Fuerte版本的,好久没有更新,不知不觉又出来了好几个新的版本,今天删除了Fuerte,计划安装Hydro版本的尝尝新,按照官网的安装流程,很快就可以把新版本安装上去了,但是在&q ...
- Linux搭建GIT 使用Eclipse创建并上传Git项目 EGit操作
Linux搭建Git 1. gitblit服务器文档 http://gitblit.com/setup_go.html 2. 安装jdk 参考 http://blog.csdn.net/jerome_ ...
- MinerConfig.java 爬取配置类
MinerConfig.java 爬取配置类 package com.iteye.injavawetrust.miner; import java.util.List; /** * 爬取配置类 * @ ...
- CSDN2013年度博客之星评选
亲爱的3Ser,大家好!很荣幸我能够成为CSDN 2013年度博客之星评选的候选人,希望大家移步到此处,为我投上一票.在过去的一年里,感谢大家对我的支持,2014年我会继续努力,为大家分享更多更好的3 ...