您的位置:首页 > 数据库

PL/SQL控制结构

2012-09-18 16:44 288 查看
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关键字,则循环方式相反,将从上标到下标。

下标和上标之间需要使用“..”连接。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: