一、简介
像编程语言一样,oracle PL/SQL也有自己的流程控制语句。通过流程控制语句,我们可以在PL/SQL中实现一下比较复杂的业务逻辑操作。而无需到程序中去控制,在一定程度上提高了效率,这也是PL/SQL的强大之处。PL/SQL流程控制语句有如下几种:
- 控制语句: 包括IF 语句、CASE语句
- 循环语句: 包括LOOP语句, WHILE语句、FOR语句
- 顺序语句: 包括GOTO语句
二、语句种类
1、控制语句
a、IF语句
语法如下:
IF 条件语句 TEHN 执行语句
ELSIF 条件语句 TEHN 执行语句
ELSE 执行语句
END IF;
示例如下:
DECLARE i number; str VARCHAR2(18) := 'b'; BEGIN --数字判断 if(i = 6) THEN NULL; -- 如果什么都不做建议写null,保证语句的完整性 ELSIF(i is null) THEN dbms_output.put_line('null'); ELSE dbms_output.put_line('null'); END IF; -- 字符串判断 if(str = 'a') THEN dbms_output.put_line('if'); ELSIF (str = 'b') THEN dbms_output.put_line('elsif'); ELSE dbms_output.put_line('else'); END IF; END;
b、CASE语句
语法如下:
1、变量判断
CASE 变量
WHEN 值 THEN 执行语句
WHEN 值 THEN 执行语句
END CASE;
2、表达式判断
CASE
WHEN 表达式 TEHN 执行语句
WHEN 表达式 TEHN 执行语句
END CASE;
示例代码如下:
DECLARE str VARCHAR2(18) := 'B'; num NUMBER := 60; strresult VARCHAR2(10); numresult VARCHAR2(10); BEGIN -- 变量判断 CASE str WHEN 'A' THEN strresult := '优秀'; WHEN 'B' THEN strresult := '良好'; WHEN 'C' THEN strresult := '合格'; WHEN 'D' THEN strresult := '不及格'; END CASE; --表达式判断 CASE WHEN num < 60 THEN numresult := '不及格'; WHEN num < 70 THEN numresult := '合格'; WHEN num < 70 THEN numresult := '良好'; WHEN num < 70 THEN numresult := '优秀'; END CASE; dbms_output.put_line(strresult); dbms_output.put_line(numresult); END;
2、循环语句
a、LOOP语句
语法如下:
LOOP
执行语句
EXIT WHEN 条件
END LOOP;
示例代码:
DECLARE i NUMBER := 0 ; BEGIN LOOP i := i + 1 ; dbms_output.put_line (i) ; EXIT WHEN i = 5 ; END LOOP ; END ;
b、WHILE语句
语法如下:
WHILE 条件 LOOP
执行语句
END LOOP;
-- 打印i每次增加后的值 DECLARE i NUMBER := 0 ; BEGIN WHILE i < 5 LOOP i := i + 1 ; dbms_output.put_line ('i:' || i) ; END LOOP ; END ;
c、FOR语句
语法如下:
FOR 变量 IN (REVERSE) 数字 .. 数字 LOOP
执行语句
END LOOP;
加上REVERSE就是数字的逆序。
示例代码如下:
-- index 是for开始就定了的 BEGIN -- 打印1到5之前的数 FOR i IN 1 .. 5 LOOP dbms_output.put_line ('i:' || i) ; END LOOP ; -- 打印5-到20的数,逆序打印 FOR j IN REVERSE 5 .. 20 LOOP dbms_output.put_line ('j:' || j) ; END LOOP ; END ;
3、顺序语句
a、GOTO语句
语法如下:
GOTO label;
GOTO语句一般都是由某行跳到另外一行。
示例代码如下:
1 DECLARE 2 i NUMBER := 1 ; 3 BEGIN 4 loop 5 dbms_output.put_line (i) ; 6 i := i + 1 ; 7 IF i = 10 THEN 8 GOTO label ; 9 END IF ; 10 END loop ; 11 << label >> 12 dbms_output.put_line ('label') ; 13 END;
本例子就i一直循环加一,当i等于10时,跳出循环,跳到第11行并执行。