zoukankan      html  css  js  c++  java
  • PL/SQL学习笔记异常处理

    一:预定义异常错误
    先看代码:

    declare 
    mytitle labor.xland.title%type;
    begin
    select title into mytitle from labor.xland where state = 2;
    dbms_output.put_line(mytitle);
    exception
    when no_data_found then
    dbms_output.put_line('没有找到数据');
    end;


    这段程序当检索到数据的时候就输出数据
    检索不到数据即输出  没有找到数据
    no_data_found 是一个预定义异常错误类型
    更多预定义异常错误,请看:
    http://www.cnblogs.com/liulun/articles/1526177.html


    二:非预定义异常错误
    先看代码:

    declare 
    v_sqlcode number;
    v_sqlerrm varchar2(2048);
    begin
    insert into labor.xland values(null,'1111',1);
    exception
    when no_data_found then
         dbms_output.put_line('没有找到数据');
    when others then
         if sqlcode = -1400 then
            v_sqlcode := sqlcode;
            v_sqlerrm := sqlerrm;
            dbms_output.put_line(to_char(v_sqlcode));
            dbms_output.put_line(v_sqlerrm);
         end if;
    end;

    when 块不必跟end结束
    if块需跟end if结束
    sqlcode为错误码
    sqlerrm为oracle反馈的错误信息
    此程序输出:

    -1400
    ORA-01400: 无法将 NULL 插入 ("LABOR"."XLAND"."TITLE")

    另外还有pragma exception_init(name,errcode)函数来处理非预定义异常
    如:

    declare 
    v_exception exception;
    pragma exception_init(v_exception,-1400);
    begin
    insert into labor.xland values(null,'1111',1);
    exception
    when no_data_found then
         dbms_output.put_line('没有找到数据');
    when v_exception then
         dbms_output.put_line('没有找到数据1');
    end;

    这里提到了一个新的数据类型  exception
    pragma exception_init(name,errcode)
    把错误号为-1400的错误赋值给v_exception
    在第二个when子句中不能使用sqlcode等系统变量

    三:自定义异常并抛出
    先看代码

    declare 
    v_exception EXCEPTION;
    begin
    RAISE   v_exception;
    exception
    when v_exception then
       dbms_output.put_line('捕获异常');
    end;

    先定义一个异常
    然后抛出这个异常
    然后捕获这个异常
    如此而已

  • 相关阅读:
    android 颜色值参考,(有颜色图
    Virtual address cache memory, processor and multiprocessor
    VUEJS2.0源码理解--优
    qlserver、Mysql、Oracle三种数据库的优缺点总结
    三层与MVC
    数据结构 常用定义
    c语言 typedef
    C动态内存分配
    c 指针(一)
    stdlib 头文件
  • 原文地址:https://www.cnblogs.com/liulun/p/1537937.html
Copyright © 2011-2022 走看看