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;
-------------------------------------------------------------------------------------------------------