PL/SQL编程基础简介及实践(3)

9、流程控制语句
1)语句分类:控制语句(IF)、循环语句(LOOP 、EXIT) 顺序语句(GOTO、NULL)
2)结构说明
a)
IF <布尔表达式> THEN
 PL/SQL语句和SQL语句
END IF;
b)
IF <布尔表达式> THEN
 PL/SQL语句和SQL语句
ELSE
其他语句
END IF;

IF <布尔表达式1> THEN
 PL/SQL语句和SQL语句1
ELSIF <布尔表达式2> THEN
其他语句1
ELSIF <布尔表达式3> THEN
其他语句2
ELSE
其他语句3
END IF;

IF语句示例
declare
 v_roleId varchar2(20); --角色编号
v_result varchar2(60);
begin
 for vv in (select distinct su.role_id
 from test_ur su
 where su.role_id in ('project_sz',
 'project_bj',
 'project_gz',
 'project_sh')) loop
 if (vv.role_id = 'project_sz') then
 v_result := vv.role_id || '_表示的是_角色1';
 dbms_output.put_line(v_result);
 elsif (vv.role_id = 'project_sh') then
 v_result := vv.role_id || '_表示的是_角色2';
 dbms_output.put_line(v_result);

elsif (vv.role_id = 'project_gz') then
 v_result := vv.role_id || '_表示的是_角色3';
 dbms_output.put_line(v_result);
elsif (vv.role_id = 'project_bj') then
 v_result := vv.role_id || '_表示的是_角色4';
 dbms_output.put_line(v_result);
else
 v_result := vv.role_id || '_表示的是_未知角色';
dbms_output.put_line(v_result);
 end if;
end loop;
 dbms_output.put_line(to_char(sysdate, 'hh24:mi:ss') || '处理成功');
end;

loop语句示例
loop
执行的语句
exit when <条件语句>; --当条件为满足时,退出循环
end loop;
--loop示例
declare
 v_count number;
 v_time number;
begin
 v_count := 0;
 loop
 v_count := v_count + 1;
 dbms_output.put_line('第' || v_count || '次循环');
exit when(v_count > 3);
 end loop;
end;

while语句示例
while <布尔表达式> loop
执行的语句
end loop;
--while示例
declare
 v_count number;
 v_time number;
begin
 v_count := 0;
 while (v_count < 3) loop
 v_count := v_count + 1;
 dbms_output.put_line('第' || v_count || '次循环');
end loop;
end;

for循环语句示例
for 循环计数器 in [reverse]下限 .. 上限 loop
执行的语句
end loop;
每循环1次,计数器自动加1,加上reverse关键字则自动减1,必须为从小到大的整数,可以使用exit when 退出循环
declare
 v_count number;
begin
 v_count := 8;
 for i in 1 .. v_count loop
 dbms_output.put_line('第' || i || '次循环');
exit when(i > 3);
 end loop;
end;

case when循环语法
--语法1
case 条件表达式
when 表达式结果1 then
语句1
 ...
 when 表达式结果n then
语句n
 [else 表达式结果]
end case;

--语法2
case 条件表达式
when 表达式结果1 then
语句1
 ...
 when 表达式结果n then
语句n
 [else 语句]
end case;

case when语句示例
select trunc(tur.created_date, 'dd'),
 count(case
 when tur.role_id = 'project_sh' then
 1
 else
 null
 end) as 角色1,
 count(case
 when tur.role_id = 'project_gz' then
 1
 else
 null
 end) as 角色2,

count(case
 when tur.role_id = 'project_sz' then
 1
 else
 null
 end) as 角色3,
 from test_ur tur
 group by trunc(tur.created_date, 'dd')
 order by trunc(tur.created_date, 'dd') desc;

5)goto 无条件跳转到指定标签所在部分
goto lable

<<lable>>
6)null 不执行任何操作的语句

10、异常和错误处理
1、Oracle提供异常情况(exception)和异常处理(exception handler)来实现对错误的处理。
2、异常情况(exception)指在正常执行过程中未预料的事件,程序块的异常处理预定义错误和自定义错误,运行PL/SQL块时一旦产生异常而没有指出如何处理时,就会自动终止整个PL/SQL块的运行。
3、异常错误分为3类(预定义错误、非预定义错误、自定义错误)
预定义错误:无需在程序中定义,由Oracle自动引发,共24个,直接在异常中使用。
非预定义错误:需在程序中定义,由Oracle自动引发
自定义错误:需在程序中定义,且需在程序中引发。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/a01f8bfbf76046f959ee1e5e1c78a904.html