oracleption总结.doc_第1页
oracleption总结.doc_第2页
oracleption总结.doc_第3页
oracleption总结.doc_第4页
oracleption总结.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Oracle异常处理异常处理是考验一个应用程序健壮性的最好方式,开发人员必须考虑程序中可能出现的各种错误,并进行相应的处理。Oracle中异常分为预定义异常,非预定义异常和自定义异常三种。一 预定义异常预定义异常是指由PL/SQL所提供的系统异常。当PL/SQL应用程序违反了Oracle规则或出现其它系统限制的情况时,将会隐含地触发一个内部异常。以下是PL/SQL为我们预定义的异常(经常更新中):1 CURSOR_ALREADY_OPEN该异常触发ORA-06511错误。当程序中的一个游标已经执行了打开操作,如果开发人员试图再一次打开这个已经打开的游标时,将触发该异常。示例:DECLARECURSOR test_cursor ISSELECT SYSDATE FROM dual;BEGINOPEN test_cursor;FOR test_cursor2 IN test_cursor LOOPdbms_output.put_line(test_cursor2.SYSDATE);END LOOP;EXCEPTIONWHEN cursor_already_open THENdbms_output.put_line(游标已经打开,不能再次对游标执行打开操作。);END;/2 INCALID_CURSOR该异常触发ORA-01001错误。当试图对一个尚未打开的游标执行任何操作,如打开该非法的游标执行赋值操作,或者关闭未打开的游标时,将触发该异常。示例:DECLARECURSOR test_cursor ISSELECT SYSDATE FROM dual;test_time DATE;BEGIN-OPEN test_cursor;FETCH test_cursorINTO test_time;dbms_output.put_line(当前时间为: | test_time);CLOSE test_cursor;EXCEPTIONWHEN invalid_cursor THENdbms_output.put_line(请检查游标是否已经打开.);END;/3 NO_DATA_FOUND该异常触发ORA-01403错误。当读取一个游标进行赋值操作(SELECT INTO操作)时,如果未返回任何行,将触发该异常。示例:DECLAREtest_owner DATE;BEGINSELECT t.owner INTO test_owner FROM all_tables t WHERE t.table_name = test;dbms_output.put_line(test_owner);EXCEPTIONWHEN NO_DATA_FOUND THENdbms_output.put_line(No value.);END;/4 TOO_MANY_ROWS该异常触发ORA-01422错误。上面是没有返回记录,这里是返回对条记录的时候会触发该异常。示例:DECLAREtest_records dba_tables%ROWTYPE;BEGINselect * INTO test_records from dba_tables where owner=APPS AND ROWNUM 关联异常和错误 - 引用例外当定义Oracle错误和例外之间的关联关系时,要使用伪过程EXCEPTION_INTI。下面以处理ORA-02291错误为例说明:DECLAREe_integrity EXCEPTION;PRAGMA EXCEPTION_INIT(e_integrity, -2291);BEGINUPDATE emp SET deptno = dno WHERE empno = &eno;EXCEPTIONWHEN e_integrity THENdbms_output.put_line(该部门不存在.);END;/三 自定义异常使用预定义异常和非预定义异常,程序可以捕获Oracle错误,并且在出现Oracle错误时自动触发对应的异常。但是在实际应用中,可能还会遇到其它错误,这时,可以为特定的情况自定义异常,不过需要显示触发该异常:通过定义异常,然后关联异常和错误,显示触发异常,最后在EXCEPTION中处理该异常。示例:DECLAREl_error_message VARCHAR2(200);e_user_exception EXCEPTION;BEGIN* * * * *;IF 出现错误 THENl_error_message := 定义错误信息;RAISE e_user_exception;END IF;EXCEPTIONWHEN e_user_exception THENraise_application_error(-20001, l_error_message);END;/四 例外函数1 SQLCODE,SQLERRM在PL/SQL块中出现Oracle错误时,通过使用例外函数可以取得错误号以及相关的错误消息。SQLCODE 返回Oracle错误号。SQLERRM 返回错误号对应的错误消息。示例:DECLAREv_ename emp.ename%TYPE;BEGINSELECT ename INTO v_ename FROM emp WHERE sal = &v_sal;dbms_output.put_line(雇员名: | v_ename);EXCEPTIONWHEN NO_DATA_FOUND THENdbms_output.put_line(不存在工资为 | v_sal | 雇员);WHEN OTHERS THENdbms_output.put_line(错误号 | SQLCODE);dbms_output.put_line(SQLERRM);END;/2 RAISE_APPLICATION_ERROR在存储过程,函数和包中使用RAISE_APPLICATION_ERROR可以自定义错误号和消息。raise_application_error:用于自定义错误消息(用于程序段中) 语法:raise_application_error(error_number,message,TRUE | FALSE);error_number : 错误号,范围是: -20000 -20999之间的负整数;message : 错误消息,长度不能超过2048字节;第三个可靠选参数,如果TRUE,该错误会被放在先前错误堆栈中;如果FALSE(默认),则替换先前所有错误.示例:CREATE OR REPLACE PROCEDURE raise_comm(eno NUMBER,commission NUMBER) ISv_comm m%TYPE;BEGINSELECT comm INTO v_comm FROM emp WHER

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论