PL/SQL的流程控制语句分为三种:
- 条件语句:IF语句,CASE语句。
- 循环语句:LOOP语句,EXIT语句。
- 顺序语句:GOTO语句,NULL语句。
1.条件语句
if表达式
IF 布尔表达式 THEN
sql语句和pl/sql 语句;
END IF;
或
IF 布尔表达式 THEN
pl/sql语句和SQL语句;
ELSE
其他语句;
END IF;
或
IF 布尔表达式 THEN
pl/sql语句和SQL语句;
ELSIF 布尔表达式 THEN
其他语句;
ELSIF 布尔表达式 THEN
其他语句;
注意:ELSIF 不要写成 ELSEIF。
例子:
DECLARE
V_empno emp.salary%type :=&empno;
V_comment varchar2(25);
BEGIN
select salary into V_sal from emp where empno=V_empno;
if V_sal>5000 then
V_comment:='有点少';
elsif V_sal>8000 then
V_comment :='还不错';
else
V_coment :='你很棒哦';
end IF;
dbms_output.put_line(V_coment);
END;
case表达式
case selector
when 表达式1 then 结果1
when 表达式2 then 结果2
when 表达式n then 结果n
else 其他语句
END;
例子:
DECLARE
V_grant char(1) :=&grant;
V_rank varchar2(10);
BEGIN
V_rank=
case V_grant
when 'A' then '你真棒'
when 'B' then '你可以啊'
when 'C' then '一般般哦'
else '好差'
end;
dbms_output.put_line('grant:' ||V_rank );
END;
2.循环语句
loop语句
LOOP
执行的语句;
exit when 满足条件;
END LOOP;
例子:
DECLARE
i number(2):=0;
BEGIN
LOOP
i:=i+1;
dbms_output.put_line(i);
EXIT when i=10;
END LOOP;
END;
while语句
WHERE 布尔表达式 LOOP
需要执行的语句;
END LOOP;
例子:
DECLARE
i number(2):=0;
WHILE i<10 LOOP
dnms.output.put_line(i);
i:=i+1;
END LOOP;
END;
for…in循环
for 循环计数器 in [reverse] 上限..下限 LOOP
需要执行的语句;
end loop;
其中:
1.每循环一次,循环变量自动+1;加上reverse关键字,每循环一次,循环变量自动-1。
2.跟在in reverse后面的数字必须从小到大,但不一定是整数,可以是能转换成整数的表达式。
例子:
BEGIN
for i in 1..5 loop
dbms_output._put_line(i);
end loop;
for i in reverse 1..5 loop
dbms_output._put_line(i);
end loop;
END;
3.标号和GOTO语句
PL/SQL中GOTO是无条件调到指定标号中。
一般形式为:
GOTO label;
....
<<label>>
例子:
BEGIN
for i in 1..5 then loop
dbms_output.put_line('我还没跳,我是:'||i);
end loop;
if i=3 then
goto lee;
end if;
<<lee>>
dbms_output.put_line('我跳了,我是:'||i);