PL/SQL是面向过程的语言,存在针对逻辑的控制语言。主要的逻辑控制语句有IF、IF....ELSE...、IF....ELIF.....、嵌套IF、CASE、LOOP、WHILE...LOOP、FOR...LOOP、CURSOR FOR LOOP。
一、IF条件控制语句
IF语句有三种使用方式:IF、IF...ELSE...、IF...ELIF....。这三种方式根据实际的情况灵活选择。
(1)IF 语法结构:
IF condition THEN statement;
END IF;
(2) IF...ELSE...结构语法结构:
IF condition THEN statements ;
ELSE statements;
END IF;
(3)IF....ELIF....结构
IF condition THEN statements;
ELIF condition2 THEN statements;
......
[ELSE statements;]
END IF;
(4) IF嵌套
二、CASE条件控制语句
CASE条件控制语句可以分为两种类型:
1)一种是简单的CASE语句。它给出一个表达式,并把表达式结果同提供的几个可以预见的结果做比较,如果比较成功则执行对应的语句序列。
[<<label_name>>]
CASE case_operand
WHEN when_operand THEN statement;
[WHEN when_operand THEN statement;]
[ELSE statement;]
END CASE [label_name]
说明:<<label_name>>是一个标签,可以选择性添加。如果添加标签,建议在CASE语句结束时也标明该标签,表示结束的是某个CASE语句。
2)搜索式的CASE语句
搜索式的CASE语句会依次检查布尔值是否为TRUE,一旦为TRUE,那么它所在的WHEN子句就会被执行,而且它后面的布尔表达式将不被考虑。如果所有的布尔表达式都不为TRUE,那么程序将转到ELSE子句。如果没有ELSE子句,那么系统会给出CASE_NOT_FOUND异常。
[<<label_name>>]
CASE
WHEN boolean_expression THEN statement;
.....
[ELSE statement;]
END CASE [label_name];
三、LOOP循环控制语句
LOOP循环语句有四种形式:LOOP、WHILE...LOOP、FOR.....LOOP、CURSOR FOR LOOP。
1、基本的LOOP
该形式的LOOP循环属于LOOP循环控制语句中最基本的结构,它会反复执行LOOP和END LOOP之间的语句序列。用于基本的LOOP语句本身没有包含中断循环的条件,所以通常情况下都是和其他的条件控制语句一起使用,利用EXIT、GOTO等可以中断LOOP循环。
<<label_name>>
LOOP
statement.....;
END LOOP [label_name];
基本的LOOP语句需要和条件控制语句一起使用,否则会出现死循环的情况。通常情况下,正常中止循环的方式有以下两种:(1)在循环中使用IF语句与EXIT组合来结束循环,表示当满足某个条件时退出循环体,然后向后执行。EXIT默认是退出当前的循环,如果使用标签,可以退出指定的LOOP循环。
(2)使用EXIT...WHEN语句来结束循环。这种方式在游标中经常使用。它代表的含义是:当WHEN后面的条件为TRUE时,EXIT会被触发。如果EXIT后面不加LOOP循环,则表示中止当前的循环。例如: EXIT basic_loop WHEN v_num>5;
2、WHILE...LOOP循环
WHILE...LOOP结构的语句本身可以终止LOOP循环,当WHILE后面的布尔表达式为TRUE时,LOOP和END LOOP之间的语句集将执行一次,而后重新判断WHILE后面的表达式是否为TRUE。语法结构如下:
[<<label_name>>]
WHILE boolean_expression
LOOP
statement;
END LOOP [label_name];
说明:语法中的boolean_expression是一个布尔表达式,只要当表达式为TRUE的时候,statement部分才能得到执行。
3、FOR...LOOP
FOR...LOOP语句循环遍历指定范围内的整数。FOR...LOOP循环的语法结构如下:
[<<label_name>>]
FOR index_name IN [REVERSE] lower_bound .. upper_bound
LOOP
statement;
END LOOP [label_name];
说明:index_name为循环计数器,注意不能为其赋值。REVERSE:该项指定循环的方式,默认的是由下标到上标,如果使用REVERSE关键字,则循环方式相反,将从上标到下标。
下标和上标之间需要使用“..”连接。