oracle中的预定异常和自定义异常

预定异常

  oracle中的预定异常情况大约有24个,对于这种异常情况的处理,无须再程序中定义,可用oracle自动引发,常见的预定异常如下

异常 说明
ACCESS_INTO_NULL 在未初始化对象时出现
CASE_NOT_FOUND CASE语句中的选项与用户输入的数据不匹配时出现
COLLECTION_IS_NULL 给尚未初始化的表或数组赋值时出现
CURSOR_ALREADY_OPEN 在用户试图重新打开已经打开的游标时出现。在重新打开游标前必须先将其关闭
DUP_VAL_ON_INDEX 在用户试图将重复的值存储在使用唯一索引的数据库列中时出现
INVALID_CURSOR 在执行非法游标运算( 如打开一个尚未打开的游标)时出现
INVALID_NUMBER 在将字符串转换为数字时出现
LOGIN_DENTED 在输入的用户名或密码无效时出现
NO_ DATA_FOUND 在表中不存在请求的行时出现。此外,当程序引用已经删除的元素时,也会引发NO_ DATA FOUND异常
STORAGE_ERROR 在内存损坏或PLSQL耗尽内存时出现
TOO_MANY_RowS 在执行SELECT INTO语句后返回多行时出现
VALUE_ERROR 在产生大小限制错误时出现,例如, 变量中的列值超出变量的大小
ZERO_ DIVIDE 以零作为除数时出现

处理自定义异常

  在程序执行过程中,出现编程人员认为的非正常情况,对于这种情况的处理,需要用户在程序中定义,然后显示的将其在程序中引发

对于这类异常情况的处理,步骤如下

在pl/sql块的定义异常情况

  <异常情况> exception;

抛出异常情况

  raise  <异常情况>

预定异常

--异常
declare
   v_comm emp.comm%type;
   e_comm_is_null exception;           --定义异常类型变量
begin
   select comm into v_comm from emp where empno=7788;
   if v_comm is null then
      raise e_comm_is_null;
   end if;
exception
   when no_data_found then
     dbms_output.put_line(‘雇员不存在!错误为:‘||SQLcode||SQLErrm);
   when e_comm_is_null then
     dbms_output.put_line(‘该雇员无补助‘);
end;

结果:

用户自定义异常

--自定义异常
declare
   v_comm emp.comm%type;
begin
   select comm into v_comm from emp where empno=7788;
   if v_comm is null then
      raise_application_error(‘-20010‘,‘该雇员无补助‘);
   end if;
end;

结果:

 注意自定义异常的编号范围是 -20999-20000之间的负整数,消息长度最长为2048字节

原文地址:https://www.cnblogs.com/hfx123/p/9942513.html

时间: 2024-10-12 02:38:15

oracle中的预定异常和自定义异常的相关文章

【PLSQL】Oracle中的异常

一.摘要 在PLSQL程序开发过程中,很重要的部分就是对程序异常的监控和处理,包括如何触发异常,何时进行处理,如何进行处理,是否将程式中的所有异常集中在一起,通过公共异常处理的procedure或function,如果没有完善的程式处理机制,很难说该程式是一只健壮的程式,当程式遇到很多类型或者量很多资料时,系统若没有异常处理必然会导致程式的出错 当预判到了某些异常,需要对预判到的异常进行合适相应的处理,是否抛出异常还是忽略还是其他 当然程式没有预判到或者是一些未知的异常遇到,所以异常处理模块也要

Oracle中PL/SQL的执行部分和各种流程控制

Oracle中PL/SQL的执行部分和异常部分 一.PL/SQL的执行部分. 赋值语句. 赋值语句分两种,一种是定义一个变量,然后接收用户的IO赋值:另一种是通过SQL查询结果赋值. 用户赋值举例: set serveroutput on; accept abc prompt '请输入abc的值'; DECLARE a int:= &abc; BEGIN dbms_output.put_line(a); END; 查询赋值举例: set serveroutput on; DECLARE str

Oracle知识分类之异常

Oracle异常分类                                                                                                                        Oracle预定义异常(即已定义的内部异常) Oracle非预定义异常(即未定义的内部异常) 用户自定义异常 常见的预定义异常                                                         

Oracle中的sqlerrm和sqlcode

Oracle中的sqlerrm和sqlcode sqlcode:sqlcode函数用来返回pl/sql执行内部异常代码.其中0表示成功:-1表示失败:100表示没有检索到数据:+1表示用户自定义异常.   语法:sqlcodesqlerrm:sqlerrm函数用来返回指定错误代码的错误信息.   语法:SQLERRM [(error_number)] 一个Oracle的错误动静最多只能包孕512个字节的错误代码.如果没有异常被触发,则SQLCODE返回0,SQLERRM返回“ORA-0000:n

oracle中的事务

数据库事务有严格的定义,它必须满足4个特性:原子性(Atomic):表示组成一个事务的多个数据库操作是一个不可分割的原子单元只有所有的操作执行成功,整个事务才能提交,事务中任何一个数据库操作失败,己经执行的任何操作都必须撤销,让数据主加返回到初状态.一致性(Consistency):事务操作成功后,数据所处的状态和它的业务规则是一致的,即数据不会被被破坏.如从A账户转账100元到B账户,不管操作成功与否,A和B的存款总额不变的.隔离性(Isolation):在并发数据操作时,不同的事务拥有各自的

oracle中的游标(转)

Oracle中的游标有两种:显式游标.隐式游标.显示游标是用cursor...is命令定义的游标,它可以对查询语句(select)返回的多条记录进行处理,而隐式游标是在执行插入 (insert).删除(delete).修改(update)和返回单条记录的查询(select)语句时由PL /SQL 自动定义的. 显式游标 当声明了显式游标后,可以通过以下三条命令控制显式游标的操作:打开游标.推进游标.关闭游标. 声明显式游标 Ø  无参游标 cursor c_auths is select * f

Oracle中PL/SQL简介、基本语法以及数据类型

Oracle中PL/SQL简介.基本语法以及数据类型 一.PL/SQL简介. Oracle PL/SQL语言(Procedural Language/SQL)是结合了结构化查询和Oracle自身过程控制为一体的强大语言,PL/SQL不但支持更多的数据类型,拥有自身的变量申明,赋值语句,而且还有条件,循环等流程控制语句.过程控制结构与SQL数据处理能力无缝的结合形成了强大的编程语言,可以创建过程和函数以及程序包. PL/SQL是一种块结构的语言,它将一组语句放在一个块中,一次性的发送给服务器,由服

MyBatis在Oracle中插入数据并返回主键的问题解决

引言:  在MyBatis中,希望在Oracle中插入数据之时,同时返回主键值,而非插入的条数... 环境:MyBatis 3.2 , Oracle, Spring 3.2   SQL Snippet in XML Configuration: <insert id="insertSelective" parameterType="com.jxxx.p2pp.model.UUserInfo"> <selectKey resultType="

深入理解Oracle中的latch

深入理解Oracle中的latch 串行化 概述 串行化 - 数据库系统本身是一个多用户并发处理系统,在同一个时间点上,可能会有多个用户同时操作数据库, 多个用户同时在相同的物理位置上写数据时,不能发生互相覆盖的情况,这叫做串行化,串行化会降低系统的并发性,但这对于保护数据结构不被破坏来说则是必需的.在Oracle数据库中,通过闩锁(latch)和锁定(lock)来解决这两个问题.闩锁和锁定既有相同点又有不同点.相同点在于它们都是用于实现串行化的资源.而不同点则在于闩锁(Latch)是一个低级别