学习要求
有一定关系型数据的操作功底,会SQL语句
教学目标
熟练掌握Oracle数据库PL/SQL编程中控制语句
条件语句
if....then....end if
IF 布尔表达式 THEM
PL/SQL和SQL语句
END IF;
if....then..else...end if
IF 布尔表达式 THEM
PL/SQL和SQL语句
ELSE
其他语句
END IF;
if....then..elsif...then...end if
IF 布尔表达式 THEM
PL/SQL和SQL语句
ELSIF 布尔表达式 THEM
其他语句
END IF;
注意:是ELSIF 不是 ELSEIF
case ... when ... then ....else .... end
CASE 变量/列
WHEN 值1 THEN 结果1
WHEN 值2 THEN 结果2
WHEN 值N THEN 结果N
[ ELSE 兜底结果]
END;
需求:输入一个年龄,如果大于18岁,输出:欢迎光临;如果小于18岁,输出:18禁;如果等于18岁:输出:请家长陪同观看
declare
v_age number(2);
begin
v_age := &v_age; -- 交互输入v_age的值
if v_age > 18 then
dbms_output.put_line('欢迎光临');
elsif v_age < 18 then
dbms_output.put_line('18禁');
else
dbms_output.put_line('请家长陪同观看');
end if;
end;
需求:输入一个字符串,如果字符为A,输出:优秀;如果字符为B,输出:良;如果字符为C,输出:一般;如果字符为D,输出:不及格
declare
v_char varchar2(2);
v_result varchar2(10);
begin
v_char := &v_char; -- 交互输入v_age的值
v_result :=
case v_char
when 'A' then '优秀'
when 'B' then '良'
when 'C' then '一般'
else '不及格'
end;
dbms_output.put_line(v_result);
end;
注意:输入的字符串必须使用 '' 括起来
循环语句
loop循环
LOOP
要执行的语句
EXIT WHEN 条件语句; -- 条件满足退出,不满足继续循环
END LOOP;
需求:求1到100的总和
declare
v_sum number(5) := 0;
v_i number(3) := 1;
begin
loop
v_sum := v_sum + v_i;
v_i := v_i + 1;
exit when v_i > 100;
end loop;
dbms_output.put_line(v_sum);
end;
while循环
WHILE 布尔表达式 LOOP
要执行的语句
END LOOP;
需求:求1到100的总和
declare
v_sum number(5) := 0;
v_i number(3) := 1;
begin
while v_i <= 100 loop
v_sum := v_sum + v_i;
v_i := v_i + 1;
end loop;
dbms_output.put_line(v_sum);
end;
数字循环
FOR 变量 IN 最小值..最大值 LOOP
要执行语句
END LOOP;
注意:循环操作必须是数字类型, 最小值,最大值必须是整数,不能是变量或者表达式
需求:求1到100的总和
declare
v_sum number(5) := 0;
begin
for v_i in 1 .. 100 loop
v_sum := v_sum + v_i;
-- v_i := v_i + 1; -- 不需要自增,语法自己自增
end loop;
dbms_output.put_line(v_sum);
end;
循环控制语句
用于控制循环的走向的语句
goto语句
goto语句:程序执行中,无条件跳到指定标签位置
GOTO label
........
<<label>>
需求:循环打印10次helloword,在第5次时退出
declare
begin
for v_i in 1 .. 10 loop
if v_i = 5 then
goto output;
end if;
dbms_output.put_line('helloword-'||v_i );
end loop;
<<output>>
dbms_output.put_line('循环结束');
end;
exit语句
exit语句:跳出循环,类似Java中的break语法
需求:循环打印10次helloword,在第5次时退出
declare
begin
for v_i in 1 .. 10 loop
if v_i = 5 then
exit;
end if;
dbms_output.put_line('helloword-'||v_i );
end loop;
dbms_output.put_line('循环结束');
end;
continue语句
continue语句:结束本次循环,继续下次循环。注意:oracle 11g新加的
需求:循环打印10次helloword,不打印第5次
declare
begin
for v_i in 1 .. 10 loop
if v_i = 5 then
continue;
end if;
dbms_output.put_line('helloword-'||v_i );
end loop;
dbms_output.put_line('循环结束');
end;
return 语句
return语句:结束程序
需求:循环打印10次helloword,在第5次时直接退出
declare
begin
for v_i in 1 .. 10 loop
if v_i = 5 then
return;
end if;
dbms_output.put_line('helloword-'||v_i );
end loop;
dbms_output.put_line('循环结束');
end;
null 语句
null 语句:表示“不用做任何事情”的意思,相当于一个占位符,目的仅仅是提高程序的可读性。
需求:循环打印10次helloword,不打印第5次
declare
begin
for v_i in 1 .. 10 loop
if v_i = 5 then
null; -- 不做任何操作
else
dbms_output.put_line('helloword-'||v_i );
end if;
end loop;
dbms_output.put_line('循环结束');
end;