1.oracle内部定义的异常
内部定义的异常是在系统运行的时自动产生的,这种是oracle定义的。
如:ORA-00060 死锁异常
ORA-27102 内存溢出异常
ORA-00001 违反唯一性约束异常
内部定义异常只有错误代码却没有异常名称。
下面将异常的名称跟错误代码进行一个关联。
DECLARE
Unique_Exception EXCEPTION;
--将唯一性约束异常与unique_exception关联起来
PRAGMA EXCEPTION_INIT(Unique_Exception, -01);
BEGIN
INSERT INTO Emp
(Empno,mgr)
VALUES
(7788,7782);
EXCEPTION
WHEN Unique_Exception THEN
Dbms_Output.Put_Line('违反了唯一性约束异常');
END;
—————————-output——————————–
违反了唯一性约束异常
2.预定义异常
预定义异常是一个预先定义的异常,会定义异常名称。
如:ORA-06500 STORAGE_ERROR 存储错误
DECLARE
v_Ename Emp.Ename%TYPE;
BEGIN
SELECT Ename
INTO v_Ename
FROM Emp
WHERE Empno = 7799;
EXCEPTION
WHEN No_Data_Found THEN
Dbms_Output.Put_Line('查询失败!');
END;
—————————-output——————————–
查询失败!
3.用户自定义异常
用户根据业务需要自定义异常。
实现方式-:
DECLARE
v_Ename Emp.Ename%TYPE;
--自定义异常
v_Define_Exception EXCEPTION;
--将自定义异常与错误码-20000进行关联 这个代码不能使oracle内部的错误码或者预先定义的错误码
PRAGMA EXCEPTION_INIT(v_Define_Exception, -20000);
BEGIN
IF v_Ename IS NULL THEN
Raise_Application_Error(-20000, '业务数据为null,请输入');
END IF;
EXCEPTION
WHEN v_Define_Exception THEN
Dbms_Output.Put_Line(SQLERRM);
END;
—————————-output——————————–
ORA-20000: 业务数据为null,请输入
实现方式二:
DECLARE
v_Ename Emp.Ename%TYPE;
--自定义异常
v_Define_Exception EXCEPTION;
--将自定义异常与错误码-20000进行关联 这个代码不能使oracle内部的错误码或者预先定义的错误码
--PRAGMA EXCEPTION_INIT(v_Define_Exception, -20000);
BEGIN
IF v_Ename IS NULL THEN
--RAISE_application_error(-20000,'业务数据为null,请输入');
RAISE v_Define_Exception;
END IF;
EXCEPTION
WHEN v_Define_Exception THEN
--Dbms_Output.Put_Line(SQLERRM);
Dbms_Output.Put_Line('业务数据为null,请输入');
END;