zoukankan      html  css  js  c++  java
  • pl/sql进阶——例外处理

    在pl/sql的执行过程中发生异常时系统所作的处理称为一个例外情况(exception)。通常例外情况的种类有三种;

    ①预定义的oracle例外情况,oracle预定义的例外情况大约有24个,对于这种例外情况无须再程序中定义,有oracle自动触发。(重点)

    ②非预定义的oracle例外情况由使用者增加定义例外情况,然后oracle自动将其触发。

    ③自定义例外,这个用的较少。

     
     

    exception

    when  <异常情况明> then

    <异常处理代码>

    when <异常情况明> then

    <异常处理代码>

    ......

    when others then

    <异常处理代码>

     

     

     

     

     

     

     

     

     

     

     

     

     

    例外传递

    如果不处理例外我们看看出出血什么情况:

    案例:编写一个过程,可接受雇员的编号,并显示该雇员的姓名。

    问题是:如果输入的雇员编号不存在,怎样去处理?

     

    create or replace procedure pro6(v_in_empno number) is

    v_ename varchar2(32);

    begin

      select ename into v_ename from emp where empno=v_in_empno;

      dbms_output.put_line('姓名是:'||v_ename);

      exception

        when no_data_found then

          dbms_output.put_line('朋友,你输入的编号不存在');

        when others then

          dbms_output.put_line('不明错误');

    end;

     

     

    常用的预定义例外

    oracle预定义例外情况的处理,下面列出常见的几个

     

    例外情况明

    错误代码

    描述

    NO_DATA_FOUND

    ORA-01403

    对于select叙述没有传回任何值

    TOO_MANY_ROWS

    ORA-01427

    只允许传回一笔记录的select叙述结果多于一笔

    INVALID_CURSOR

    ORA-01001

    使用非法的光标操作

    VALUE_ERROR

    ORA-06502

    出现数值、数据形态转换、攫取字符串或强制性的错误。

    INVALID_NUMBER

    ORA-01722

    字符串到数值的转换失败。

    ZERO_DIVIDE

    ORA-01476

    被零除

    DUP_VAL_ON_INDEX

    ORA-00001

    视图向具有唯一键值的索引中插入一个重复值。

    CASE_NOT_FOUND

    ORA-06592

    没有case条件匹配

    CURSOR_NOT_OPEN

    ORA-06511

    游标没有打开

  • 相关阅读:
    [CF845G]Shortest Path Problem?
    [洛谷P4149][IOI2011]Race
    [洛谷P4178]Tree
    [AtCoder AGC27A]Candy Distribution Again
    [洛谷P3806]【模板】点分治1
    [洛谷P2634][国家集训队]聪聪可可
    [CF280C]Game on Tree
    [洛谷P3338][ZJOI2014]力
    [CF438D]The Child and Sequence
    [CF609E]Minimum spanning tree for each edge
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11115687.html
Copyright © 2011-2022 走看看