PL/SQL 流程控制语句

PL/SQL 流程控制语句

  • 基础介绍
  • 条件语句
  • 示例
  • case表达式
    • 示例
  • 循环
    • 简单的循环
    • while循环
    • 数字式循环
  • 标号和 GOTO
  • NULL 语句

基础介绍

介绍 PL/SQL 的流程控制语句, 包括如下三类:

  • 控制语句: IF 语句
  • 循环语句: LOOP 语句, EXIT 语句
  • 顺序语句: GOTO 语句, NULL 语句

条件语句

if 布尔表达式 then
	sql语句;
end if;
if 布尔表达式 then 
	sql语句;
else 
	其他语句;
end if;	
if 布尔表达式 then
	sql语句;
elsif 其他布尔表达式 then
	其他语句;
elsif 其他布尔表达式 then
	其他语句;
else 
	其他语句;
end if;

示例

DECLARE
 v_empno emp.empno%TYPE;
 V_salary emp.sal%TYPE;
 V_comment VARCHAR2(35);
BEGIN
 SELECT sal INTO v_salary FROM emp WHERE empno=v_empno;
 IF v_salary<1500 THEN
 V_comment :='Fairly less';
 elsif v_salary <3000 then
 V_comment  :='A little money';
 else
 	V_comment  :='Lots of salary';
 end if;
 dbms_output.put_line(V_comment);
 end;	

case表达式

CASE selector
WHEN expression1 THEN result1
WHEN expression2 THEN result2
WHEN expressionN THEN resultN
[ ELSE resultN+1]
END;

示例

DECLARE
V_grade char(1) ;
V_appraisal VARCHAR2(20);
BEGIN
V_appraisal :=
CASE v_grade
WHEN ‘A’ THEN ‘Excellent’
WHEN ‘B’ THEN ‘Very Good’
WHEN ‘C’ THEN ‘Good’
ELSENo such grade’
END;
DBMS_OUTPUT.PUT_LINE(‘Grade:‘||v_grade||’ Appraisal: ‘|| v_appraisal);
END;

循环

简单的循环

-- 开始循环
LOOP
	要执行的语句;
	exit when 条件语句; /*条件满足,退出循环语句*/
-- 结束循环	
end loop;	
declare
	rt number(2) :=0
	begin
	loop
	rt := rt+1;
	DBMS_OUTPUT.PUT_LINE('int的当前值为:'||rt);
	exit when rt=10;
	end loop;
	end;

while循环

while 布尔表达式 loop
	要执行的语句;
end loop;	
declare 
	x number :=1;
begin
	while x<=100 loop
DBMS_OUTPUT.PUT_LINE('x的当前值为:'||x);
x :=x+1;
end loop;
end;		

数字式循环

FOR 循环计数器 IN [ REVERSE ] 下限 … 上限 LOOP
要执行的语句;
END LOOP;
每循环一次,循环变量自动加 1;使用关键字 REVERSE,循环变量自动减 1。跟在 IN REVERSE 后面的数字必
须是从小到大的顺序,而且必须是整数,不能是变量或表达式。可以使用 EXIT 退出循环。

BEGIN
 FOR int in 1..10 LOOP
 DBMS_OUTPUT.PUT_LINE('int 的当前值为: '||int);
 END LOOP;
 end;
CREATE TABLE temp_table(num_col NUMBER);
DECLARE
V_counter NUMBER := 10;
BEGIN
 INSERT INTO temp_table(num_col) VALUES (v_counter );
 FOR v_counter IN 20 .. 25 LOOP
 INSERT INTO temp_table (num_col ) VALUES ( v_counter );
 END LOOP;
 INSERT INTO temp_table(num_col) VALUES (v_counter );
 FOR v_counter IN REVERSE 20 .. 25 LOOP
 INSERT INTO temp_table (num_col ) VALUES ( v_counter );
 END LOOP;
END ;
DROP TABLE temp_table;

标号和 GOTO

PL/SQL 中 GOTO 语句是无条件跳转到指定的标号去的意思。语法如下:

GOTO label;
<<label>> /*标号是用<< >>括起来的标识符 */
DECLARE
 V_counter NUMBER := 1;
BEGIN
 LOOP
 DBMS_OUTPUT.PUT_LINE('V_counter 的当前值为:'||V_counter);
V_counter := v_counter + 1;
IF v_counter > 10 THEN
 GOTO l_ENDofLOOP;
END IF;
 END LOOP;
<<l_ENDofLOOP>>
 DBMS_OUTPUT.PUT_LINE('V_counter 的当前值为:'||V_counter);
END ;

NULL 语句

在 PL/SQL 程序中,可以用 null 语句来说明“不用做任何事情”的意思,相当于一个占位符,可以使某些语
句变得有意义,提高程序的可读性。如:

BEGIN

IF v_num IS NULL THEN
GOTO print1;
END IF;
<<print1>>
NULL; -- 不需要处理任何数据。
END;

你可能感兴趣的:(oracle,sql,数据库,database)