oracle PL/SQL(procedure language/SQL)程序设计--控制结构(if else )
IF逻辑结构:
IF-THEN-END IF
IF-THEN-ELSE-END IF
IF-THEN-ELSIF-END IF
语法
IF condition THEN
statements;
[ELSIF condition THEN
statements;]
[ELSE
statements;]
END IF;
实例
IF v_ename = 'OSBORNE' THEN
v_mgr := 22;
END IF;
if-then
. . .
v_job := 'SALESMAN';
v_deptno := 35;
v_new_comm := sal * 0.20;
END IF;
if-then 语句嵌套
If var1>10 then
if var2<var1 then
var2:=var1+20;
end if;
End if;
注意:上面代码中的两个end if,分别对应两个不同的if。在PL/SQL中实现if逻辑有两条规则:
规则1:每个if语句都有自己的then,以if开始的语句行不跟语句结束符(;)。
规则2:每个if语句块以相应的end if结束。
IF-THEN-ELSE
这种结构与IF-THEN语句非常相似,唯一不同的是在条件为false时,执行跟在else后的一条或多条语句。
...
IF v_shipdate - v_orderdate < 5 THEN
v_ship_flag := 'Acceptable';
ELSE
v_ship_flag := 'Unacceptable';
END IF;
...
IF-THEN-ELSE语句嵌套
IF-THEN-ELSIF 这种结构用于替代嵌套if-then-else结构。
IF v_start > 100 THEN
v_start := 2 * v_start;
ELSIF v_start >= 50 THEN
v_start := .5 * v_start;
ELSE
v_start := .1 * v_start;
END IF;
. . .
CASE表达式
CASE selector
WHEN expression1 THEN sequence_of_statements1;
WHEN expression2 THEN sequence_of_statements2;
...
WHEN expressionN THEN sequence_of_statementsN;
[ELSE sequence_of_statementsN+1;]
END CASE;
注意:为了避免CASE_NOT_FOUND异常,在编写CASE语句时应该带有ELSE语句。
从emp表中查询指定员工的工资,并判断该员工的工资是否低于2000,如果条件成立,那么将该员工的工资增加200
DECLARE
v_sal emp.sal%TYPE;
v_ename emp.ename%type:='&ename';
BEGIN
SELECT sal INTO v_sal FROM scott.emp
WHERE LOWER(ename)=LOWER(v_ename);
IF v_sal <2000 THEN
UPDATE emp SET sal=v_sal+200
WHERE LOWER(ename)=LOWER(v_ename);
END IF;
END;
根据给定的职工编号从emp表中查询该职工的奖金(comm字段的值),如果奖金的值不为0那么将表中该职工的奖金增加200,否则将该职工的奖金设置为100。
DECLARE
v_comm emp.comm%TYPE;
v_no emp.empno%TYPE;
BEGIN
v_no:=&no;
SELECT nvl(comm,0) INTO v_comm FROM emp WHERE empno=v_no;
IF v_comm<>0 THEN
UPDATE emp SET comm=comm+200 WHERE empno=v_no;
ELSE
UPDATE emp SET comm=100 where empno=v_no;
END IF;
END;
构造逻辑条件
处理NULL值
使用IS NULL操作符处理NULL值
任何包含NULL的表达式其值为NULL
用NULL值与表达式连接时, NULL值被当作空串来处理
循环控制结构LOOP循环
Loops循环是一种控制结构,允许重复执行一组命令,直到决定停止循环为止.
三种loop循环类型: Basic loop,FOR loop,WHILE loop,
例子 给定任意一个整数,计算该数的阶乘
DECLARE
v_num NUMBER(2):=# --用户任意给定的一个整数
v_pro NUMBER(20):=1;
i NUMBER(2):=1; --控制循环结束的循环变量
BEGIN
IF v_num=0 THEN
v_pro:=1;
ELSE
LOOP
v_pro:=v_pro*i; --计算给定整数的阶乘
i:=i+1;
EXIT WHEN i>v_num;
END LOOP;
END IF;
dbms_output.put_line('num:'||v_num||' factorial:'||v_pro);
END;
(2)FOR Loop
例子 使用FOR循环实现某数的阶乘
DECLARE
v_num NUMBER(2):=#
v_pro NUMBER(20):=1;
BEGIN
IF v_num=0 THEN
v_pro:=1;
ELSE
FOR i IN 1..v_num LOOP
v_pro:=v_pro*i;
END LOOP;
END IF;
dbms_output.put_line('num:'||v_num||' factorial:'||v_pro);
END;
(3)WHILE Loop
例子 使用WHILE循环实现某数的阶乘
DECLARE
v_num NUMBER(2):=#
v_pro NUMBER(20):=1;
i NUMBER(2):=1;
BEGIN
IF v_num=0 THEN
v_pro:=1;
ELSE
WHILE i<=v_num LOOP
v_pro:=v_pro*i;
i:=i+1;
END LOOP;
END IF;
dbms_output.put_line('num:'||v_num||' factorial:'||v_pro);
END;
最后还有救是loop的多层嵌套运用(Attention)
oracle PL/SQL(procedure language/SQL)程序设计--控制结构(if else )的更多相关文章
- oracle PL/SQL(procedure language/SQL)程序设计
PL/SQL(procedure language/SQL)语言是Oracle对SQL语言的过程化扩充,是一个完整的编程语言.PL/SQL实现了过程化语句(如分支.循环等)与SQL语句的无缝连接,将过 ...
- Oracle笔记--PL/SQL(Procedure Language & Structured Query Language)
1.PL/SQL是一种高级数据库程序设计语言,专门用于在各种环境下对Oracle数据库进行访问.该语言集成于数据库服务器中,所以PL/SQL代码可以对数据进行快速高效的处理. 2.PL/SQL是对SQ ...
- oracle PL/SQL(procedure language/SQL)程序设计之异常(exception)
什么是异常?在PL/SQL中的一个标识.在程序运行期间被触发的错误.异常是怎样被触发的?产生一个Oracle错误.用户显示触发.怎样处理异常?用异常处理句柄捕获异常.传播异常到调用环境. 捕获异常 E ...
- oracle PL/SQL(procedure language/SQL)程序设计之函数+过程+包
匿名PL/SQL块回顾 DECLARE (可选) 定义在PL/SQL块中要使用的对象BEGIN (必须) 执行语句EXCEPTION (可选) 错误处理语句END; (必须)匿名块( ...
- oracle PL/SQL(procedure language/SQL)程序设计之函数+过程+包(转)
匿名PL/SQL块回顾 DECLARE (可选) 定义在PL/SQL块中要使用的对象 BEGIN (必须) 执行语句 EXCEPTION (可选) 错误处理语句 END; (必 ...
- oracle PL/SQL(procedure language/SQL)程序设计之游标cursors
游标 Cursors--Conception 每一条被Oracle服务器执行的SQL语句都有一个独立的游标与之相关联:隐式游标 Implicit cursors: 用于所有的DML和PL/SQL的SE ...
- oracle PL/SQL(procedure language/SQL)程序设计之触发器(trigger)
创建触发器 触发器类似于过程和函数,都拥有声明.执行和异常处理过程的带名PL/SQL块.与包类似,触发器必须存储在数据库中.前面已经讲过,过程是显式地通过过程调用执行的,同时过程调用可以传递参数.与之 ...
- oracle PL/SQL(procedure language/SQL)程序设计(在PL/SQL中使用SQL)
在PL/SQL程序中,允许使用的SQL语句只有DML和事务控制语句,使用DDL语句是非法的.使用SELECT语句从数据库中选取数据时,只能返回一行数据.使用COMMIT, ROLLBACK, 和SA ...
- oracle PL/SQL(procedure language/SQL)程序设计(续集)之PL/SQL函数
PL/SQL函数 examples:“ 构造一个邮件地址 v_mailing_address := v_name||CHR(10)|| ...
随机推荐
- C# 递归算法与冒泡
C# 递归算法求 1,1,2,3,5,8,13···static void Main(string[] args){ int[] cSum = new int[10];for (int i = 0; ...
- 检查.net代码中占用高内存函数(翻译)
哈哈,昨天没事做,在CodeProject瞎逛,偶然看到这篇文章,居然读得懂,于是就翻译了一下,当练习英语,同时增强对文章的理解,发现再次翻译对于文章的一些细节问题又有更好的理解.下面是翻译内容,虽然 ...
- 数据库 SQL :有关 NULL 值引发 TRUE、FALSE、UNKNOW 三值逻辑
在 Java.C# 中,相信如果是 boolean 类型值,只有两种选择 true.false.然而,在 SQL 查询中,NULL 值的引入,使得新增了 UNKNOW ,因此,就产生了 TRUE.FA ...
- MyEclipse 8.5 开发环境配置,汉化,Aptana2.0插件,SVN 插件,Flex Builder 3/4 插件安装(转载)
转载地址http://elf8848.iteye.com/blog/630864 下载MyEclipse 8.5 可以通过代理http://www.proxyie.cn/访问MyEclipse的官方网 ...
- IAR USING PRE- AND POST-BUILD ACTIONS
Using pre-build actions for time stamping If necessary, you can specify pre-build and post-build act ...
- 部署应用程序QQ
部署QQ: 1.在模板机上安装.Netframework4.0,然后再安装库中的ApplicationFramework下 SAV_x64_zh-CN 目录下的SeqSetup.exe程序 2.安装完 ...
- 内网能PING通TELNET通不能访问解决
遇到一个离奇故障,内网,两个主机在同一IP段内,能互相PING通,TELNET对方的WEB服务器端口,通. 但用IE访问时不能,显示HTTP400.这明显是客户端系统的问题啊!但如何解决呢?我强烈怀疑 ...
- Codeforces Round #244 (Div. 2) B. Prison Transfer 线段树rmq
B. Prison Transfer Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/problemset/pro ...
- Approaching the Fun Factor in Game Design
I recently did some research on this and talked to Dr. Clayton Lewis (computer Scientist in Residenc ...
- 在XAF应用程序使用现有的数据库?
https://documentation.devexpress.com/#Xaf/CustomDocument3061