版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、异常和游标管理第七章1目标详细讨论论异常游标管理理技巧2异常8-1程序错误误编译时运行时异常处理运行行时错误误3PL/SQL是如何处处理异常常的?错误引发发异常每当引发发异常时时,都将将控制权权传递给给异常处处理程序序异常处理理程序处处理异常常异常8-24异常中涉涉及的步步骤声明异常常引发异常常处理异常常DeclareBeginExceptionEnd;异常8-35异常的类类型预定义的的异常非预定义义的异常常用户定义义的异常常异常8-46预定义的的异常由Oracle为常见错错误预定定义在DBMS_STANDARD程序包中提供了了这些定定义不需要显显式声明明预定义的的异常7预定义的的异常decl
2、arevar_status order_master.ostatus %type;beginselectostatusinto var_statusfromorder_master;dbms_output.put_line(var_status);-exception-whentoo_many_rows then-dbms_output.put_line(查询返回回不止一一行);end;在Oracle中无法从从引发异异常的位位置继续续处理。8预定义的的异常exceptionwhen thenwhen thenwhenothersthenend;预定义异异常列表表:参考考课本page1709非预
3、定义义的异常常指定与Oracle错误关联联的异常常关联是通通过PRAGMAEXCEPTION_INIT编译指示示建立的的PRAGMAEXCEPTION_INIT通知编译译器使异异常名称称与标准准的oracle服务器错错误编号号关联。非预定义义的异常常10非预定义义的异常常declaredup_row exception;pragmaexception_init(dup_row,-1422);var_status order_master.ostatus %type;beginselectostatusinto var_statusfromorder_master;dbms_output.put
4、_line(var_status);exceptionwhen dup_rowthendbms_output.put_line(返回行数数超过一一行);end;11用户定义义的异常常由程序定定义的错错误在声明部部分中声声明类型EXCEPTION声明用户户定义的的异常是使用RAISE语句显式式引发的的用户定义义的异常常12用户定义义的异常常参考课本本举例page173.13Raise_Application_Error创建用户户定义的的错误消消息,用用户定义义的错误误消息可可以比指指定的异异常描述述的更详详细。既可以在在可执行行部分中中使用,也可以以在异常常部分中中使用错误编号号必须介介于200
5、00和和20999之之间错误消息息的长度度可长达达 2048个个字节节定义错误误消息14定义错误误消息declaredup_row exception;pragmaexception_init(dup_row,-1422);var_status order_master.ostatus %type;beginselectostatusinto var_statusfromorder_master;dbms_output.put_line(var_status);exceptionwhen dup_rowthenraise_application_error(-20001,返回行数数超过一一行,
6、true);end;15游标游标指向上下文区区域的句柄或或指针上下文区区域-用于SQL处理的内内存区上下文区区域的内内容语句处理理的行数指向语句句的语法法分析表表示的指针16游标类型型游标类型型静态游标标隐式游标标显式游标标REF游标17隐式游标标隐式游标标PL/SQL为所有DML将打开一一个隐式式游标,在SQL操作完成成后,关关闭游标标。18游标属性性%NOTFOUND:true表示DML语句不返返回任何何行。%FOUND:true表示DML语句影响响一行或或者多行行。%ROWCOUNT:统计DML语句返回回的行数数。%ISOPEN:在DML语句执行行之后,始终为为false。隐式游标标19
7、隐式游标标begindeletefromorder_masterwhereorderno= o201;ifsql%notfoundthendbms_output.put_line(未找到值值);elsedbms_output.put_line(找到并删删除之);endif;end;20隐式游标标declareorder_noorder_master.orderno%type;beginselectordernointo order_no fromorder_masterwhereorderno =o001;ifsql%rowcount 0thendbms_output.put_line(sql
8、%rowcount);dbms_output.put_line(从中选择择行);elsedbms_output.put_line(从中未选选择行);endif;end;21显式游标标由用户显显式声明明游标将指指向活动动集中的的当前行行控制显式式游标Open:执行查查询,并并将游标标指针置置于第一一行。Fetch:游标指指针前进进到下一一行。Close:关闭游游标。显式游标标22显式游标标declareicodeorder_detail.itemcode%type;cursoraisselectitemcodefromorder_detailwhereorderno =o001;beginope
9、n a;loopfetcha intoicode;updateitemfileset itemrate =22.5whereitemcode= icode;exit whena%notfound;endloop;dbms_output.put_line(项费率已已经更新新);closea;end;23显式游标标declareorder_noorder_detail.orderno%type;cursoraisselectordernofrom order_detailwhereitemcode= i205;beginopen a;loopfetcha intoorder_no;updateor
10、der_master setostatus =Dwhereorderno =order_no;exit whena%notfound;endloop;closea;end;24显式游标标declarecursortestisselect*from order_detailwhereorderno =o001;myorder order_detail%rowtype;-声明游标标beginopen test;-打开游标标loopfetchtest intomyorder;-操作游标标exit whentest%notfound;endloop;dbms_output.put_line(从表中获获
11、取的行行数为:|test%rowcount);closetest;-关闭游标标end;25显式游标标declarecursormycurisselect *fromorder_master;beginifnotmycur%isopenthendbms_output.put_line(游标尚未未被打开开);endif; open mycur;ifmycur%isopenthendbms_output.put_line(游标已经经打开);endif;closemycur;end;26查询嵌套套表中数数据的游游标举例27循环游标标显式游标标的替代代方法它的工作作原理是是什么?隐式打开开游标自动从活活
12、动集获获取行在处理完完所有行行时关闭闭游标优点简化代码码的编写写循环游标标28循环游标标-使用循环环游标删删除特定定供应商商的所有有订单declarecursorfor_curisselectordernofrom order_masterwherevencode =v002;beginforcust_recinfor_curloopdeletefromorder_detailwhereorderno= cust_rec.orderno;endloop;dbms_output.put_line(供应商v002的所有订订单被取取消);commit;end;29游标变量量类似于于PL/SQL变量,
13、可可以在运运行时接接纳不同同的值。定义游标标变量类类型的语语法type type_nameisrefcursor returnreturn_type;声明游标标变量ref_var type;REF游标30游标变量量强游标(有约束)、弱游标标(无约束)当声明的的游标变变量类型型有返回回类型的的时候,称为强强游标。没有返返回类型型的游标标变量称称为弱游游标。Type t_add_refisrefcursor returnvendor_master%rowtype;Type t_add_refisrefcursor;31使用游标标变量在运行时时使不同同的语句句与之关关联Open cursor_var
14、iableforselect_statement;32游标变量量举例declaretype r1_curisrefcursor;var1 r1_cur;onovarchar2(5);novarchar2(20);qord number;beginno:=gf;ifupper(no)=ORDERNOthenopen var1forselectordernofrom order_masterwherevencode =v001;fetchvar1 intoono;dbms_output.put_line(订单号|ono);closevar1;elseopen var1forselectqty_or
15、dfrom order_detailwhereorderno =o001;loopfetchvar1 intoqord;exit whenvar1%notfound;dbms_output.put_line(订购数量量是|qord);endloop;closevar1;endif;end;33游标变量量举例declaretype ordertypeisrecord(orderno varchar2(5),odatedate,vencode varchar2(5),ostatus char(1),del_datedate);type ordercur is refcursorreturn order_master%rowtype;order_cvordercur;order_recordertype;beginopen order_cv forselectorderno,odate,vencode,ostatus,del_datefrom order_masterwherevencode =v001;loopfetchorder_cvinto order_rec;exit whenorder_cv%notfound;dbms_output.pu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026学年河北省邢台市英华集团初中部初三下学期5月联考试题含解析
- 广州市广大附中2026届中考模拟第一次测试数学试题试卷含解析
- 2026年广东省江门市江海区初三春季期中考试物理试题含解析
- 2026年大学大一(机械电子工程)机械电子学阶段测试试题及答案
- 护理护理实践中的儿科护理与儿童保健技术课件
- 2025年前台防疫接待礼仪答题技巧
- 护理面试面试成功之道与技巧
- 护理不良事件分级人文关怀
- 护理查房中的护理投诉
- 护理课件开发:护理职业发展
- 2026年徐州生物工程职业技术学院单招职业倾向性考试题库附答案
- 2026小红书商业产品全景手册
- 2025年抖音法律行业趋势白皮书-
- 2025年警务交通技术专业任职资格副高级职称考试题库及答案
- 2025年届华夏金融租赁有限公司校园招聘笔试参考题库附带答案详解
- 商业地产招商运营方案设计
- 2025疾控检验试题及答案
- mect治疗应急预案
- 2024年山西三支一扶真题
- 2025年江苏农林职业技术学院单招职业技能测试题库及完整答案详解
- 核磁室专项施工方案
评论
0/150
提交评论