a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 98|回复: 0

[综合] oraclel/sql例外(exception)异常现象

[复制链接]
发表于 2012-8-4 13:54:49 | 显示全部楼层 |阅读模式
oraclel/sql例外(exception)异常现象
/ D- z) n0 p4 T0 K5 M+ ~, C/ j例外:是一种pl/sql 标志符,如果运行pl/sql 出现错误或警告则抛出异常# r8 }+ Q. ~, I) L" g
  例外3种类型:预定义例外、非预定义例外,自定义例外
, t% f& o* a! l. D" x  预定义例外:由pl/sql 所提供的系统例外2 J/ ^5 T  v9 a& M( Q4 x
  常见类型如下:$ }/ m. P$ C6 C) K
  access_into_null    对象没有初始化case_not_found      case 缺少elsif collection_is_null  集合没有初始化cursor_already_open 游标已经打开dup_val_on_index    存在重复的索引invalid_cursor      无效的游标(如游标没有打开,或关闭已经关闭的游标)
7 N" N. \7 ]9 @  invalid_number      数字转换出现字母什么的no_data_found       数据没有找到too_many_rows       本来是接收单条数据,却返回了多行zero_divide         不能用数字整除0 subscript_beyond_count   下标越界subscript_outside_limit  下标为负value_error 变量长度不足login_denied  用户名密码错误not_logged_on 没有登录数据库program_error pl/sql 内部问题,可能需要重新安装系统包或者数据字典rowtype_ mismatch  宿主游标变量与pl/sql 游标变量的返回类型不兼容self_is_null 在使用对象类型时,如果null 实例上调用成员方法会导致此异常storage_error  pl/sql 块运行时,超出内存空间或者内存被损坏sys_invalid_rowid 将字符串转变为rowid时,必须使用有效的字符串timeout_on_resource oracle 在等待资源时超时===============================================================
" l, U( M) v1 L7 L  非预定义例外:处理与预定义例外无关的oracle 错误。
: E. v* C5 W8 P# c% o  定义例外——>关联例外和错误——>引用例外eg;declare e_integraity EXCEPTION;PRAGMA EXCEPTION_INIT(e_integraity,-2291);begin update emp set deptno=&dno where empno=&eno;EXCEPTION when e_integrity then dbms_output.put_line('该部门不存在!');end;
; m4 A" S; N2 g5 [3 ]" r* [  ========================================================自定义例外 :是指有pl/sql 开发人员所定义的例外。预定义例外和非预定义例外都与oracle 错误有关,并且出现oracle 错误时会隐含触发相应例外;而自定义例外与oracle 错误没有任何关联,步骤;定义例外——> 显示触发例外——> 引用例外8 V& {6 Y0 R# z3 Y
  declare e_integrity exception;PRAGMA EXCEPTION_INIT(e_integrity ,-2291);e_no_employee EXCEPTION;begin update emp set deptno=&dno where empno=&eno;if SQL%NOTFOUND then raise e_no_employee;end if;exception when e_integrity then dbms_output.put_line('该部门不存在');when e_no_employee then dbms_output.put_line('该雇员不存在');
$ v, c9 _# l; N$ g4 ]1 S  end;* p" G# S+ L/ l/ v
  ============================================使用例外函数sqlcode 用于返回错误号sqlerrm 返回错误号所对应的消息raise_application_error() 该过程用于在pl/sql 中定义错误消息,只能用与(包,函数,存储过程,触发器),不能用于匿名块和客户端子程序. u7 F2 h/ o, @% d: [
  ==============================================================================/ \. d5 Y, H! R3 W+ _
  pl/sql 编译警告:为了提高pl/sql 子程序的健壮性并避免错误,在编写程序时可以激活警告检查。4 j. a; ]( X1 t- C" p; g5 G8 \3 [
  并提高程序性能。
6 Y+ b( [% u; e$ B  pl/sql 警告分类。
( k/ t- |. C( f2 ~3 f  SERVER:用于检查可能出现的不可预料结果或错误结果,例如别名。
0 p, K5 P0 h8 Q5 ^! [" ?  PERFORMANCE: 该类警告用于检查可能引起的性能问题,例如在执行insert操作时为NUMBER 列提供了VARCHAR2类型的数据。
3 [" l# `3 v$ D- y% {0 F( P" H  INFORMATIONAL: 该类警告用于检查子程序的死代码。
+ i/ y+ Q- Y$ Z3 ]0 p  ALL: 该类关键字用于检查所有警告(SERVER,PREFORMACE,INFORMATIONAL)
3 {  b8 A( f/ P) g/ E  可以使用 alter system/session 激活或禁止警告eg; alter system set plsql_warnings='ENABLE:ALL';alter system set plsql_warnings='ENABLE:PERFORMANCE';
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-15 01:57 , Processed in 0.177026 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表