EXCEPTION
WHEN first_exception THEN
statement1;
......
WHEN second_exception THEN
statement1;
......
WHEN OTHERS THEN
statement1;
......
DECLARE
/*
* 聲明部分--聲明變量、常量、復(fù)雜數(shù)據(jù)類型、游標等
*/
BEGIN
/*
* 執(zhí)行部分--PL/SQL語句和SQL語句
*/
EXCEPTION
/*
* 異常處理部分--處理運行錯誤
*/
END; --塊結(jié)束標記
DECLARE
v_name emp.ename%TYPE;
v_sal emp.sal%TYPE;
BEGIN
SELECT ename, sal INTO v_name, v_sal FROM emp WHERE empno = &no;
IF v_sal < 3000 THEN
dbms_output.put_line(v_name || '的工資是:' || v_sal);
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
dbms_output.put_line('員工號輸入錯誤!');
WHEN OTHERS THEN
dbms_output.put_line('其他錯誤!');
END;
DECLARE
v_name emp.ename%TYPE;
v_sal emp.sal%TYPE := &salary;
BEGIN
SELECT ename INTO v_name FROM emp WHERE sal = v_sal;
DBMS_OUTPUT.put_line(v_name || '的工資是:' || v_sal);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.put_line('沒有該工資的員工');
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.put_line('多個員工具有該工資');
WHEN OTHERS THEN
DBMS_OUTPUT.put_line('其他錯誤');
END;
1、在PL/SQL塊中定義部分定義異常情況:<異常情況> EXCEPTION;
2、將其定義好的異常情況與標準的ORACLE錯誤聯(lián)系起來,使用PRAGMA EXCEPTION_INIT語句:PRAGMA EXCEPTION_INIT(<異常情況>, <錯誤代碼>);
3、在PL/SQL塊的異常情況處理部分對異常情況做出相應(yīng)的處理。
創(chuàng)新互聯(lián)公司是由多位在大型網(wǎng)絡(luò)公司、廣告設(shè)計公司的優(yōu)秀設(shè)計人員和策劃人員組成的一個具有豐富經(jīng)驗的團隊,其中包括網(wǎng)站策劃、網(wǎng)頁美工、網(wǎng)站程序員、網(wǎng)頁設(shè)計師、平面廣告設(shè)計師、網(wǎng)絡(luò)營銷人員及形象策劃。承接:網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、網(wǎng)站改版、網(wǎng)頁設(shè)計制作、網(wǎng)站建設(shè)與維護、網(wǎng)絡(luò)推廣、數(shù)據(jù)庫開發(fā),以高性價比制作企業(yè)網(wǎng)站、行業(yè)門戶平臺等全方位的服務(wù)。
BEGIN
DELETE FROM dept WHERE deptno = &deptno;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line(SQLCODE || '###' || SQLERRM);
END;
-2292###ORA-02292: 違反完整約束條件 (SCOTT.FK_DEPTNO) - 已找到子記錄
2、刪除dept表中指定部分的信息:
DECLARE
--1、定義非預(yù)定義異常的標識符
e_fk EXCEPTION;
--2、把Oracle錯誤和異常信息建立關(guān)聯(lián)
-- -2292 違反外鍵約束的錯誤號
PRAGMA EXCEPTION_INIT(e_fk, -2292);
BEGIN
DELETE FROM dept WHERE deptno = &deptno;
EXCEPTION
WHEN e_fk THEN
-- 3、捕捉并處理異常
dbms_output.put_line('此部門下有員工,不能刪除!');
WHEN OTHERS THEN
dbms_output.put_line(SQLCODE || '###' || SQLERRM);
END;
此部門下有員工,不能刪除!
DECLARE
v_empno emp.empno%TYPE := &empno;
e_no_result EXCEPTION;
BEGIN
UPDATE emp SET sal = sal + 100 WHERE empno = v_empno;
IF SQL%NOTFOUND THEN
RAISE e_no_result;
ELSE
COMMIT;
END IF;
EXCEPTION
WHEN e_no_result THEN
dbms_output.put_line('數(shù)據(jù)更新失敗!');
WHEN OTHERS THEN
dbms_output.put_line('其他錯誤');
END;
DECLARE
v_empno emp.empno%TYPE := &empno;
v_ename emp.ename%TYPE := '&ename';
v_deptno emp.deptno%TYPE := &deptno;
BEGIN
INSERT INTO emp(empno, ename, deptno) VALUES(v_empno, v_ename, v_deptno);
IF SQL%FOUND THEN
DBMS_OUTPUT.put_line('數(shù)據(jù)插入成功');
COMMIT;
END IF;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.put_line('錯誤號:' || SQLCODE);
DBMS_OUTPUT.put_line('錯誤信息:' || SQLERRM);
END;
raise_application_error(error_number, message);