Oracle中的PL/SQL(二)

一、程序的控制结构

PL/SQL程序段中有三种程序结构:

顺序结构

条件分支结构

循环结构

1、条件分支结构

  (1)if condition then

      statement1;

      end if ;

  (2)if condition then

      statement1;

      else

      statement2;

      end if ;

  (3)if condition then

      statement1;

      elsif condition then

      statement2;

      else

      statement3;

      end if ;

2、循环结构

基本循环
LOOP
语句序列
EXIT WHEN 布尔表达式(为真);
END LOOP
WHILE LOOP循环
WHILE 条件 LOOP
语句序列
END LOOP
数值FOR LOOP循环
FOR 计数器v_i IN [REVERES]低界.1..10.高界
LOOP
语句序列
END LOOP

loop循环实例:

Declare
v_counter number:=41;
Begin
loop
insert into dept(deptno, dname) values (v_counter, 'loop');
v_counter:=v_counter+1;
exit when v_counter>50;
end loop;
commit;
End; 
 
while循环实例:
Declare
v_counter number:=51;
Begin
while v_counter<=60 loop
insert into dept(deptno, dname) values (v_counter, 'while loop');
v_counter:=v_counter+1;
end loop;
commit;
End; 
 
for循环实例:
Declare
v_counter number;
Begin
for v_counter in 61..65 loop
insert into dept(deptno, dname) values (v_counter, 'for loop');
end loop;
commit;
End; 

二、异常的处理

由于PL/SQL程序块一旦产生异常而没有指出如何处理时,程序就会自动终止整个程序运行。
异常情况处理(EXCEPTION)是用来处理正常执行过程中出现未预料的错误事件,使得程序遇到错误能继续运行。
异常处理部分一般放在 PL/SQL 程序体的后半部,结构为:
DECLARE
BEGIN
EXCEPTION
WHEN first_exception THEN <code to handle first exception >
WHEN second_exception THEN <code to handle second exception >
WHEN OTHERS THEN <code to handle others exception >
END;
异常处理可以按任意次序排列,但 OTHERS 必须放在最后
例:
更新指定员工(7788)工资,如工资小于1500,则加100。
DECLARE
v_empno emp.empno%TYPE :=7788;
v_sal emp.sal%TYPE;
BEGIN
SELECT sal INTO v_sal FROM emp WHERE empno=v_empno;
IF v_sal<=1500 THEN
UPDATE emp SET sal=sal+100 WHERE empno=v_empno;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('数据库中没有编码为'||v_empno||'的员工');
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('程序运行错误!请使用游标');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('发生其它错误!');
END;

常见的异常说明:

NO_DATA_FOUND      SELECT INTO没有找到数据
TOO_MANY_ROWS    SELECT INTO 返回多行
ZERO_DIVIDE              试图被零除
INVALID_NUMBER      转换一个数字失败
posted @ 2020-07-03 17:16  夫人nn  阅读(82)  评论(0)    收藏  举报