数据库中的异常(预定义,非预定义,用户自定义)
DECLARE --预定义 异常信息 不声明异常 v_empno emp.empno%TYPE :=&empno; 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; DBMS_OUTPUT.PUT_LINE('编码为'||v_empno||'员工工资已更新!'); ELSE DBMS_OUTPUT.PUT_LINE('编码为'||v_empno||'员工工资已经超过规定值!'); END IF; END; ------------------------------------------------------------------------------------------------------ --用户自定义异常 DECLARE v_empno emp.empno%TYPE :=&empno; --声明变量V_empno,类型 emp.empno%TYPE 类型与emp表empno列类型一致 no_result EXCEPTION; --声明一个异常 名为 no_result BEGIN UPDATE emp SET sal=sal+100 WHERE empno=v_empno; IF SQL%NOTFOUND THEN RAISE no_result;--触发异常 -- raise触发 END IF; EXCEPTION WHEN no_result THEN --当异常被触发 DBMS_OUTPUT.PUT_LINE('你的数据更新语句失败了!'); WHEN OTHERS THEN --可以理解为异常包,接收 定义异常之外的 异常 DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM); END; ------------------------------------------------------------------------------------------------------- --非预定义异常 -- 在PL/SQL 块的声明部分定义异常情况: --<异常情况> EXCEPTION; --将其定义好的异常情况,与标准的ORACLE错误联系起来,使用EXCEPTION_INIT语句 --PRAGMA EXCEPTION_INIT(<异常情况>, <错误代码>); --在PL/SQL 块的异常情况处理部分对异常情况做出相应的处理 DECLARE v_deptno dept.deptno%TYPE :=&deptno; deptno_remaining EXCEPTION;--声明异常 --- PRAGMA EXCEPTION_INIT( deptno_remaining, -2292);/* -2292 是违反一致性约束的错误代码 */ --异常情况 --oracle错误代码 /* 如果oracle语句执行中出现-2292错误,则触发deptno_remaining异常*/ --- BEGIN DELETE FROM dept WHERE deptno=v_deptno; EXCEPTION WHEN deptno_remaining THEN DBMS_OUTPUT.PUT_LINE('违反数据完整性约束!'); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM); END; -------------------------------------------------------------------------------------------------------