在执行PLSQL程序的时候,有时候程序的执行过程中多多少少会遇到一些异常,
数据库中已经编写好各种各样的异常代码与异常描述。当然我们根据实际的问题与情况,
还可以自己定义以下异常,定义异常,抛出异常等环节来解决异常,从而能够使程序顺利执行。
以下是一些异常的使用,并定义了一些异常。
----异常处理:
---异常解决:
scott@PROD>set serveroutput on
scott@PROD>
scott@PROD>DECLARE
2 v_deptno dept.deptno%TYPE := &deptno;
3 v_dname dept.dname%TYPE;
4 v_str varchar2(50);
5 BEGIN
6 SELECT dname INTO v_dname FROM dept WHERE deptno = v_deptno;
7 select decode(mod((40-length(v_dname))/2,2),0,lpad('*',(40-length(v_dname))/2,'*'),
8 lpad('*',trunc((40-length(v_dname))/2),'*'))||v_dname||
9 decode(mod((40-length(v_dname))/2,2),0,lpad('*',(40-length(v_dname))/2,'*'),
10 lpad('*',trunc((40-length(v_dname))/2),'*')) into v_str from dual;
11 dbms_output.put_line('****************************************');
12 dbms_output.put_line(v_str);
13 dbms_output.put_line('****************************************');
14 EXCEPTION
15 WHEN NO_DATA_FOUND THEN
16 dbms_output.put_line('haha');
17 WHEN TOO_MANY_ROWS THEN
18 dbms_output.put_line('hehe');
19 WHEN others THEN
20 NULL;
21 END;
22 /
Enter value for deptno: 20
old 2: v_deptno dept.deptno%TYPE := &deptno;
new 2: v_deptno dept.deptno%TYPE := 20;
****************************************
****************RESEARCH****************
****************************************
PL/SQL procedure successfully completed.
scott@PROD>
#程序执行完成。
---使用异常函数:
hr@PROD>DECLARE
2 v_deptno NUMBER := 500;
3 v_name VARCHAR2(20) := 'Testing';
4 e_invalid_department EXCEPTION;
5 BEGIN
6 UPDATE departments
7 SET department_name = v_name
8 WHERE department_id = v_deptno;
9 IF SQL % NOTFOUND THEN
10 RAISE e_invalid_department;
11 END IF;
12 COMMIT;
13 EXCEPTION
14 WHEN e_invalid_department THEN
15 DBMS_OUTPUT.PUT_LINE('No such department id.');
16 END;
17 /
No such department id.
PL/SQL procedure successfully completed.
#程序执行完成。虽然没有deptno=500的记录,但是由于使用的异常处理,这样,更新过程中的异常不会影响真个程序的执行,当中的异常交由异常函数处理。
---使用异常函数自定义异常:
hr@PROD>DECLARE
2 v_deptno NUMBER := 270;
3 v_name VARCHAR2(20) := 'Testing';
4 BEGIN
5 UPDATE departments
6 SET department_name = v_name
7 WHERE department_id = v_deptno;
8 IF SQL%FOUND THEN
9 RAISE_APPLICATION_ERROR(-20001, 'Warning!');
10 END IF;
11 COMMIT;
12 EXCEPTION
13 WHEN OTHERS THEN
14 DBMS_OUTPUT.PUT_LINE(SQLCODE);
15 DBMS_OUTPUT.PUT_LINE(SQLERRM);
16 ROLLBACK;
17 END;
18 /
-20001
ORA-20001: Warning!
PL/SQL procedure successfully completed.
以上程序中,虽然存在异常,但是通过自定义异常,然后把异常抛出,让程序顺利执行。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31392094/viewspace-2128351/ ,如需转载,请注明出处,否则将追究法律责任。