数据库中的异常(预定义,非预定义,用户自定义)
时间:2021-07-01 10:21:17
帮助过:25人阅读
预定义 异常信息 不声明异常
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;
-------------------------------------------------------------------------------------------------------
数据库中的异常(预定义,非预定义,用户自定义)
标签:pre 好的 数据完整性 非预定义异常 upd result font 接收 理解