博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oracle中的三种异常情况
阅读量:6564 次
发布时间:2019-06-24

本文共 2790 字,大约阅读时间需要 9 分钟。

pl/sql中关于异常的处理:    程序在正常运行过程中发生的未预料的事件;	为了提高代码的健壮性,使用异常处理部分可以有效的解决程序正常执行过程中可能出现的错误,使程序正常运行;		pl/sql中异常的定义格式:	    declare	    begin	    exception        end;            异常分为三类:        预定义异常、非预定义异常、自定义异常            预定义异常:由系统自定义的异常;例,no_data_found                常用系统预定义异常:            预定义异常处理(2*个)		错误号		异常错误信息名称		说明		ORA-00001	DUP_VAL_ON_INDEX	试图破坏一个唯一性限制		ORA-00051	TIMEOUT_ON_RESOURCE	在等待资源时发生超时		ORA-01001	INVALID_CURSOR		试图使用一个无效的游标		ORA-01012	NOT_LOGGED_ON		没有连接到oracle		ORA-01017	LOGIN_DENIED		无效的用户名及口令		ORA-01403	NO_DATA_FOUND		select into语句没有找到数据		ORA-01422	TOO_MANY_ROWS		select into 返回多行		ORA-01410	SYS_INVALID_ROWID	从字符中向rowid转换发生错误				ORA-01476	ZERO_DIVIDE		将某个数字除以0的时候,会发生该异常		ORA-01722	INVALID_NUMBER		给数字值赋非数字值的时候,该异常就会发生,这个异常也会发生在批读取时候LIMIT子句返回非正数的时候		ORA-06500	STORAGE_ERROR		当内存不够分配SGA的足够配额或者是被破坏的时候,引发该异常		ORA-06501	PROGRAM_ERROR		当Oracle还未正式捕获的错误发生时常会发生,这是因为数据库大量的Object功能而发生		ORA-06502	VALUE_ERROR		将一个变量赋给另一个不能容纳该变量的变量时引发		ORA-06504	ROWTYPE_MISMATCH	如果游标结构不适合PL/SQL游标变量或者是实际的游标参数不同于游标形参的时候发生该异常		ORA-06511	CURSOR_ALREADY_OPEN	游标已经被OPEN,如果再次尝试打开该游标的时候,会出现该异常		ORA-06530	ACCESS_INTO_NULL	试图访问未初始化对象的时候出现				ORA-06531	COLLECTION_IS_NULL	当程序去访问一个没有进行初始化的NESTED TABLE或者是VARRAY的时候,会出现该异常		ORA-06532	SUBSCRIPT_OUTSIDE_LIMIT	使用非法的索引值来访问NESTED TABLE或者VARRAY的时候引发		ORA-06533	SUBSCRIPT_BEYOND_COUNT	当分配给NESTED TABLE或者VARRAY的空间小于使用的下标的时候,发生该异常(类似于java的ArrayIndexOutOfBoundsException)		ORA-06592	CASE_NOT_FOUND		如果定义了一个没有ELSE子句的CASE语句,而且没有CASE语句满足运行时条件时出现该异常		ORA-30625	SELF_IS_NULL		调用一个对象类型非静态成员方法(其中没有初始化对象类型实例)的时候发生该异常		ORA-01725	USERENV_COMMITSCN_ERROR	只可使用函数USERENV('COMMITSCN')作为INSERT语句的VALUES子句中的顶级表达式或者作为UPDATE语句的SET子句中的右操作数        预定义异常的处理方式:            begin            exception                when ZERO_DIVIDE then                    dbms_output.put_line('除数不能为零');            end;            	非预定义异常:处理与预定义异常无关的,其它异常;        步骤:            定义异常:
<异常情况>
exception 将定义好的异常情况与标准的oracle错误联系起来:pragma exception_init(
<异常情况>
,
<错误代码>
) 在pl/sql块的异常情况处理部分对异常情况做出相应的处理 例如: 例:删除部门信息表中的部门号; 1.获得异常代号和异常内容: begin exception when others then dbms_output.put_line(sqlcode||' '||sqlerrm); end; 2.定义异常并将异常与标准的oracle错误联系起来: declare e_fk exception; pragma exception_init(e_fk,-2292); 3.在pl/sql块处理异常: exception when e_fk then 执行语句 自定异常:用户自定义的; 在某个特定事件发生时向应用程序的用户发出一些警告信息,而事件本身不会抛出oracle内部异常; 用户自定义的异常错误是通过显式使用raise语句触发。当错误引发时,控制就会转向exception块异常错误部分执行错误处理的代码; 例:输入员工号,涨100元工资,对于错误的员工号进行自定义异常的定义 declare e_no exception; begin update语句; if sql%notfound then raise e_no; else commit; exception when e_no then 执行语句; end;复制代码

转载于:https://juejin.im/post/5d0b3fc46fb9a07edf274a65

你可能感兴趣的文章
SpringCloud注册中心环境搭建euraka
查看>>
各类文件的文件头标志
查看>>
第四周作业——在你的实际项目旅游网站中,网页主页面主要有哪些模块?
查看>>
基于django的个人博客网站建立(一)
查看>>
ElasticSearch 安装使用
查看>>
使用nodejs创建加入用户验证的websocket服务
查看>>
反思最近这些时日的荒废
查看>>
磁盘管理
查看>>
Loop,Handler,Message的源码解析
查看>>
React性能分析利器来了,妈妈再也不用担心我的React应用慢了(转)
查看>>
Java字节流与字符操作小结
查看>>
linux学习
查看>>
[CTSC2010]珠宝商 SAM+后缀树+点分治
查看>>
[SDOI2016]储能表——数位DP
查看>>
女神(goddess)——组合数学
查看>>
UIImage保存到沙盒
查看>>
Linux的50个基本命令
查看>>
std::map 的swap错用
查看>>
钓鱼网站-现代网络“李鬼”
查看>>
mac/Linux源码安装TensorFlow
查看>>