温故知新-异常处理

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;

你可能感兴趣的:(温故知新-PLSQL)