欢迎来到天天文库
浏览记录
ID:15273898
大小:114.00 KB
页数:11页
时间:2018-08-02
《oracle_7 异常 游标 函数》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第七天异常游标函数l异常定义:异常处理用来处理正常执行中未预料的事件。异常分类:预定义异常:Oracle大约24个,不需要在程序中定义,Oracle自动引发非预定义异常:其它标准的Oracle错误,需要用户在程序中定义,然后由Oracle自动引发自定义异常:程序执行过程中,出现编程人员认为的非正常情况。对这种异常情况的处理,需要用户在程序中定义,然后显式地在程序中将其引发。语法:ExceptionWhen…thenWhenorthersthen..(必须放在最后)End;l预定义异常处理错误号异常错误信息名称说明ORA-0001Dup_val_on_index试图破坏一
2、个唯一性限制ORA-0051Timeout-on-resource在等待资源时发生超时ORA-0061Transaction-backed-out由于发生死锁事务被撤消ORA-1001Invalid-CURSOR试图使用一个无效的游标ORA-1012Not-logged-on没有连接到ORACLEORA-1403No_data_foundSELECTINTO没有找到数据ORA-1422Too_many_rowsSELECTINTO返回多行ORA-6501Program-error内部错误ORA-6511CURSOR-already-OPEN试图打开一个已存在的游标ORA
3、-6530Access-INTO-null试图为null对象的属性赋值--异常处理--预定义异常declarev_empnoemp.empno%type:=&empno;v_salemp.sal%type;beginselectsalintov_salfromempwhereempno=v_empno;ifv_sal<=2000thenupdateempsetsal=sal+100whereempno=v_empno;dbms_output.put_line('编号为:'
4、
5、v_empno
6、
7、'已经更新!');elsedbms_output.put_line('编号为:
8、'
9、
10、v_empno
11、
12、'已超过规定值!');endif;exceptionwhenno_data_foundthendbms_output.put_line('数据库中没有记录');whentoo_many_rowsthendbms_output.put_line('运行错误!请使用游标!');whenothersthendbms_output.put_line(SQLCODE
13、
14、'---'
15、
16、SQLERRM);end;l非预定义异常对于这类异常情况的处理,首先必须对非定义的oracle错误进行定义,将一个异常对象与一个oracle错误关联起来。步骤如下:1.<异常情
17、况名>Exception;---声明2.pragmaexception_init(<异常情况>,<错误代码>);--将其定义好的异常情况,与标准的ORACLE错误联系起来,使用EXCEPTION_INIT语句3.在PL/SQL块的exception对异常情况做出相应的处理。--非预定义异常declarev_deptnodept.deptno%type:=&deptno;deptno_remainingexception;--声明一个异常--和oracle系统关联,2292是违反一致性约束的错误代码pragmaexception_init(deptno_remaining
18、,-2292);begindeletefromdeptwheredeptno=v_deptno;dbms_output.put_line('删除成功!');exceptionwhendeptno_remainingthendbms_output.put_line('违反了完整性约束!');rollback;whenothersthendbms_output.put_line(SQLCODE
19、
20、'---'
21、
22、SQLERRM);end;l用户自定义异常用户定义的异常错误是通过显式使用RAISE语句来触发。当引发一个异常错误时,控制就转向到EXCEPTION块异常错误部分,执
23、行错误处理代码。步骤如下:1.<异常情况>EXCEPTION;--声明异常2.RAISE<异常情况>--触发异常3.在exception块对异常情况做出相应的处理。--用户自定义异常declarev_empnoemp.empno%type:=&empno;no_resultexception;--声明一个异常beginupdateempsetsal=sal-100whereempno=v_empno;dbms_output.put_line('数据更新成功!');--notfound是隐式游标ifsql%notfoundthenraise
此文档下载收益归作者所有