• 异常处理


    数据库异常处理
    预定义 ( 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也不会被执行。

  • 相关阅读:
    新浪微博数据抓取(java实现)
    在Tomcat下配置Solr 4.x 版本
    使用AWT组件实现验证码功能
    css自动换行
    CentOS6.5把MySQL从5.1升级到5.6后,MySQL不能启动
    centos绑定多个域名
    Centos下Yum安装PHP5.5,5.6,7.0
    CSS总结
    覆盖物
    高德地图插件
  • 原文地址:https://www.cnblogs.com/fy02223y/p/7241818.html
Copyright © 2020-2023  润新知