会计考友 发表于 2012-8-4 13:54:49

oraclel/sql例外(exception)异常现象

oraclel/sql例外(exception)异常现象
例外:是一种pl/sql 标志符,如果运行pl/sql 出现错误或警告则抛出异常
  例外3种类型:预定义例外、非预定义例外,自定义例外
  预定义例外:由pl/sql 所提供的系统例外
  常见类型如下:
  access_into_null    对象没有初始化case_not_found      case 缺少elsif collection_is_null集合没有初始化cursor_already_open 游标已经打开dup_val_on_index    存在重复的索引invalid_cursor      无效的游标(如游标没有打开,或关闭已经关闭的游标)
  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_errorpl/sql 块运行时,超出内存空间或者内存被损坏sys_invalid_rowid 将字符串转变为rowid时,必须使用有效的字符串timeout_on_resource oracle 在等待资源时超时===============================================================
  非预定义例外:处理与预定义例外无关的oracle 错误。
  定义例外——>关联例外和错误——>引用例外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;
  ========================================================自定义例外 :是指有pl/sql 开发人员所定义的例外。预定义例外和非预定义例外都与oracle 错误有关,并且出现oracle 错误时会隐含触发相应例外;而自定义例外与oracle 错误没有任何关联,步骤;定义例外——> 显示触发例外——> 引用例外
  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('该雇员不存在');
  end;
  ============================================使用例外函数sqlcode 用于返回错误号sqlerrm 返回错误号所对应的消息raise_application_error() 该过程用于在pl/sql 中定义错误消息,只能用与(包,函数,存储过程,触发器),不能用于匿名块和客户端子程序
  ==============================================================================
  pl/sql 编译警告:为了提高pl/sql 子程序的健壮性并避免错误,在编写程序时可以激活警告检查。
  并提高程序性能。
  pl/sql 警告分类。
  SERVER:用于检查可能出现的不可预料结果或错误结果,例如别名。
  PERFORMANCE: 该类警告用于检查可能引起的性能问题,例如在执行insert操作时为NUMBER 列提供了VARCHAR2类型的数据。
  INFORMATIONAL: 该类警告用于检查子程序的死代码。
  ALL: 该类关键字用于检查所有警告(SERVER,PREFORMACE,INFORMATIONAL)
  可以使用 alter system/session 激活或禁止警告eg; alter system set plsql_warnings='ENABLE:ALL';alter system set plsql_warnings='ENABLE:PERFORMANCE';
页: [1]
查看完整版本: oraclel/sql例外(exception)异常现象