zoukankan      html  css  js  c++  java
  • 异常处理

    数据库异常处理
    预定义 ( Predefined )错误
    ORACLE预定义的异常情况大约有24个。对这种异常情况的处理,无需在程序中定义,由ORACLE自动将其引发。
    EXCEPTION
    WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.PUT_LINE('数据库中没有编码为'||v_empno||'的员工');
    WHEN TOO_MANY_ROWS THEN
    DBMS_OUTPUT.PUT_LINE('程序运行错误!请使用游标');
    WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE(SQLCODE||’---‘||SQLERRM);
    SQLCode:数据库操作的返回码,其中0--成功;-1--失败;100--没有检索到数据。
    SQLERRM是一则函数。oracle sqlerrm函数 sqlerrm函数返回指定错误代码的错误信息。
    非预定义 ( Predefined )错误
    即其他标准的ORACLE错误。对这种异常情况的处理,需要用户在程序中定义,然后由ORACLE自动将其引发。
    DECLARE
    v_deptno dept.deptno%TYPE :=&deptno;
    deptno_remaining EXCEPTION;
    PRAGMA EXCEPTION_INIT(deptno_remaining, -2292);
    /* -2292 是违反一致性约束的错误代码 */
    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;
    PRAGMA EXCEPTION_INIT的用法
    如果要处理未命名的内部异常,必须使用OTHERS异常处理器或PRAGMA EXCEPTION_INIT 。PRAGMA由编译器控制,或者是对于编译器的注释。PRAGMA在编译时处理,而不是在运行时处理。EXCEPTION_INIT告诉编译器将异常名与ORACLE错误码结合起来,这样可以通过名字引用任意的内部异常,并且可以通过名字为异常编写一适当的异常处理器。

    DECLARE
    v_empno emp.empno%TYPE :=&empno;
    no_result EXCEPTION;
    BEGIN
    UPDATE emp SET sal=sal+100 WHERE empno=v_empno;
    IF SQL%NOTFOUND THEN
    RAISE no_result;
    END IF;
    EXCEPTION
    WHEN no_result THEN
    DBMS_OUTPUT.PUT_LINE('你的数据更新语句失败了!');
    WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE(SQLCODE||’---‘||SQLERRM);
    END;
    如果在声明部分引起异常情况,即在声明部分出现错误,那么该错误就能影响到其它的块
    例:DECLARE
    Abc number(3):=’abc’;
    其它语句
    BEGIN
    其它语句
    EXCEPTION
    WHEN OTHERS THEN
    其它语句
    END;
    由于Abc number(3)=’abc’; 出错,尽管在EXCEPTION中说明了WHEN OTHERS THEN语句,但WHEN OTHERS THEN也不会被执行。

  • 相关阅读:
    How much training data do you need?
    什么样的论文容易接收发表?​
    How to Write and Publish a Scientific Paper: 7th Edition(科技论文写作与发表教程)(11.04更新)
    如何起草你的第一篇科研论文——应该做&避免做
    Writing the first draft of your science paper — some dos and don’ts
    matlab学习笔记 bsxfun函数
    乘法器的Verilog HDL实现
    重构:改善既有代码的设计
    【Leetcode】Length of Last Word
    Saving HDU hdu
  • 原文地址:https://www.cnblogs.com/fy02223y/p/7241818.html
Copyright © 2011-2022 走看看