異常處理與異常函式
在執行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部落格 ” ,連結:http://blog.itpub.net/31392094/viewspace-2128351/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java 異常表與異常處理原理Java
- 異常篇——異常處理
- 異常處理與推導式
- 異常處理機制(二)之異常處理與捕獲
- windows核心程式設計---未處理異常,向量化異常處理與C++異常Windows程式設計C++
- 異常-throws的方式處理異常
- 異常處理
- restframework 異常處理及自定義異常RESTFramework
- JavaScript 異常處理JavaScript
- ThinkPHP 異常處理PHP
- React 異常處理React
- 08、異常處理
- JAVA 異常處理Java
- JAVA異常處理Java
- Abp 異常處理
- oracle異常處理Oracle
- PowerShell 異常處理
- plsql異常處理SQL
- Swift 異常處理Swift
- JS異常處理JS
- app異常處理APP
- Oracle 處理異常Oracle
- MySQL異常處理MySql
- 異常處理 (轉)
- golang - 異常處理Golang
- 異常處理2
- 異常處理1
- 異常的處理
- Java 異常處理Java
- MVC使用異常過濾器處理異常MVC過濾器
- Oracle 中異常處理函式 - SQLCODE和SQLERRMOracle函式SQL
- GoldenGate常見異常處理Go
- 異常-try...catch的方式處理異常1
- 異常-try...catch的方式處理異常2
- C#自定義異常 統一異常處理C#
- MySQL定義異常和異常處理詳解MySql
- Python異常處理Python
- PHP 核心 - 異常處理PHP