版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、异常和游标管理第七章第七章1目标n详细讨论异常n游标管理技巧2异常 8- 1n程序错误编译时编译时运行时运行时n异常处理运行时错误处理运行时错误3nPL/SQL 是如何处理异常的?错误引发异常错误引发异常每当引发异常时,都将控制权传递给异常处理每当引发异常时,都将控制权传递给异常处理程序程序异常处理程序处理异常异常处理程序处理异常异常8 - 24异常中涉及的步骤声明异常声明异常引发异常引发异常处理异常处理异常DeclareBeginExceptionEnd;异常 8- 35异常的类型预定义的异常预定义的异常非预定义的异常非预定义的异常用户定义的异常用户定义的异常异常 8- 46预定义的异常由由
2、 Oracle 为常见错误预定义为常见错误预定义在在 DBMS_STANDARD 程序包程序包中提供中提供了这些定义了这些定义不需要显式声明不需要显式声明预定义的异常7预定义的异常declare var_status order_master.ostatus %type;begin select ostatus into var_status from order_master; dbms_output.put_line(var_status);-exception- when too_many_rows then- dbms_output.put_line(查询返回不止一行); end;n在
3、Oracle中无法从引发异常的位置继续处理。8预定义的异常nexceptionn when thenn when thenn when others thennend; n预定义异常列表:参考课本page1709非预定义的异常指定与指定与 Oracle 错误关联的异常错误关联的异常关联是通过关联是通过 PRAGMA EXCEPTION_INIT 编译指示建立的编译指示建立的PRAGMA EXCEPTION_INIT通知编译器通知编译器使异常名称与标准的使异常名称与标准的oracle服务器错误编服务器错误编号关联。号关联。非预定义的异常10非预定义的异常declare dup_row excep
4、tion; pragma exception_init(dup_row,-1422); var_status order_master.ostatus %type;begin select ostatus into var_status from order_master; dbms_output.put_line(var_status);exception when dup_row then dbms_output.put_line(返回行数超过一行);end;11用户定义的异常由程序定义的错误由程序定义的错误在声明部分中声明在声明部分中声明类型类型 EXCEPTION 声明用户定义的异常声
5、明用户定义的异常是使用是使用 RAISE 语句显式引发的语句显式引发的用户定义的异常12用户定义的异常n参考课本举例page173.13Raise_Application_Error创建用户定义的错误消息,用户定义的错误消创建用户定义的错误消息,用户定义的错误消息可以比指定的异常描述的更详细。息可以比指定的异常描述的更详细。既可以在可执行部分中使用,也可以在异常部既可以在可执行部分中使用,也可以在异常部分中使用分中使用错误编号必须介于错误编号必须介于 20000 和和 20999 之间之间错误消息的长度可长达错误消息的长度可长达 2048 个字节个字节定义错误消息定义错误消息14定义错误消息定
6、义错误消息declare dup_row exception; pragma exception_init(dup_row,-1422); var_status order_master.ostatus %type;begin select ostatus into var_status from order_master; dbms_output.put_line(var_status);exception when dup_row then raise_application_error(-20001,返回行数超过一行,true); end;15游标游标指向指向上下文区域上下文区域的句柄或
7、指针的句柄或指针上下文区域上下文区域 - - 用于用于 SQL 处理的内存区处理的内存区上下文区域的内容上下文区域的内容语句处理的语句处理的行数行数指向语句的语法分析表示的指向语句的语法分析表示的指针指针16游标类型游标类型静态游标静态游标隐式游标隐式游标显式游标显式游标REF 游标游标17隐式游标隐式游标 PL/SQL为所有DML将打开一个隐式游标,在SQL操作完成后,关闭游标。18游标属性%NOTFOUND:true表示表示DML语句不返回任何行。语句不返回任何行。%FOUND: true表示表示DML语句影响一行或者多行。语句影响一行或者多行。%ROWCOUNT:统计:统计DML语句返回
8、的行数。语句返回的行数。%ISOPEN:在:在DML语句执行之后,始终为语句执行之后,始终为false。隐式游标19隐式游标begin delete from order_master where orderno = o201; if sql%notfound then dbms_output.put_line(未找到值); else dbms_output.put_line(找到并删除之); end if;end;20隐式游标declare order_no order_master.orderno%type;begin select orderno into order_no from o
9、rder_master where orderno = o001; if sql%rowcount 0 then dbms_output.put_line(sql%rowcount); dbms_output.put_line(从中选择行); else dbms_output.put_line(从中未选择行); end if;end;21显式游标由用户显式声明由用户显式声明游标将指向活动集中的当前行游标将指向活动集中的当前行控制显式游标nOpen:执行查询,并将游标指针置于第一行。:执行查询,并将游标指针置于第一行。nFetch:游标指针前进到下一行。:游标指针前进到下一行。nClose:关闭
10、游标。:关闭游标。显式游标22显式游标declare icode order_detail.itemcode%type; cursor a is select itemcode from order_detail where orderno = o001;begin open a; loop fetch a into icode; update itemfile set itemrate = 22.5 where itemcode = icode; exit when a%notfound; end loop; dbms_output.put_line(项费率已经更新); close a;en
11、d;23显式游标declare order_no order_detail.orderno%type; cursor a is select orderno from order_detail where itemcode = i205;begin open a; loop fetch a into order_no; update order_master set ostatus = D where orderno = order_no; exit when a%notfound; end loop; close a;end;24显式游标declare cursor test is sele
12、ct * from order_detail where orderno = o001; myorder order_detail%rowtype;-声明游标begin open test;-打开游标 loop fetch test into myorder; -操作游标 exit when test%notfound; end loop; dbms_output.put_line(从表中获取的行数为:|test%rowcount); close test;-关闭游标end;25显式游标declare cursor mycur is select * from order_master;beg
13、in if not mycur%isopen then dbms_output.put_line(游标尚未被打开); end if; open mycur; if mycur%isopen then dbms_output.put_line(游标已经打开); end if; close mycur;end;26查询嵌套表中数据的游标n举例27循环游标n显式游标的替代方法显式游标的替代方法它的工作原理是什么?n隐式打开游标隐式打开游标n自动从活动集获取行自动从活动集获取行n在处理完所有行时关闭游标在处理完所有行时关闭游标优点简化代码的编写简化代码的编写循环游标28循环游标-使用循环游标删除特定供
14、应商的所有订单declare cursor for_cur is select orderno from order_master where vencode = v002;begin for cust_rec in for_cur loop delete from order_detail where orderno = cust_rec.orderno; end loop; dbms_output.put_line(供应商v002的所有订单被取消); commit;end;29游标变量类似于游标变量类似于PL/SQL变量,可以在运行时变量,可以在运行时接纳不同的值。接纳不同的值。定义游标变
15、量类型的语法定义游标变量类型的语法type type_name is ref cursor return return_type;声明游标变量声明游标变量 ref_var type;REF 游标30游标变量游标变量n强游标(有约束)、弱游标(无约束)n当声明的游标变量类型有返回类型的时候,称为强游标。没有返回类型的游标变量称为弱游标。Type t_add_ref is ref cursor return vendor_master%rowtype;Type t_add_ref is ref cursor;31使用游标变量使用游标变量在运行时使不同的语句与之关联在运行时使不同的语句与之关联Ope
16、n cursor_variable for select_statement;32游标变量举例游标变量举例ndeclaren type r1_cur is ref cursor;n var1 r1_cur;n ono varchar2(5);n no varchar2(20);n qord number;nbeginn no := gf;n if upper(no) = ORDERNO thenn open var1 forn select orderno from order_mastern where vencode = v001;n fetch var1 into ono;n dbms_
17、output.put_line(订单号|ono);n close var1;n elsen open var1 forn select qty_ord from order_detailn where orderno = o001;n loopn fetch var1 into qord;n exit when var1%notfound;n dbms_output.put_line(订购数量是|qord);n end loop;n close var1;n end if;nend;33游标变量举例游标变量举例ndeclaren type ordertype is record(n order
18、no varchar2(5),n odate date,n vencode varchar2(5),n ostatus char(1),n del_date daten );n type ordercur is ref cursor return order_master%rowtype;n order_cv ordercur;n order_rec ordertype;nbeginn open order_cv forn select orderno,odate,vencode,ostatus,del_daten from order_mastern where vencode = v001;n loopn fetch order_cv into order_rec;n exit when order_cv%notfound;n dbms_output.put_line(n 这些值为: |n order_rec.orderno
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 老年医学关注焦点
- 2026年龙岩学院单招职业适应性考试模拟试题及答案解析
- 2026年重庆电信职业学院单招职业适应性考试模拟试题及答案解析
- 2026年河源职业技术学院单招职业适应性考试模拟试题及答案解析
- 2026年重庆商务职业学院单招职业适应性考试模拟试题及答案解析
- 2026年江西司法警官职业学院单招职业适应性测试模拟试题及答案解析
- 2026年重庆经贸职业学院单招职业适应性考试模拟试题及答案解析
- 呼吸科主任诊疗技术探讨
- 传染病预防与疫苗接种策略研究与实践案例
- 产科护理技术更新与推广
- 宁夏调味料项目可行性研究报告
- GRR计算表格模板
- 长沙市长郡双语实验学校人教版七年级上册期中生物期中试卷及答案
- 马克思主义经典著作选读智慧树知到课后章节答案2023年下四川大学
- 金庸短篇小说《越女剑》中英文对照版
- 2023年洛阳市洛龙区政务中心综合窗口人员招聘笔试题库及答案解析
- GB/T 19867.1-2005电弧焊焊接工艺规程
- GB/T 16102-1995车间空气中硝基苯的盐酸萘乙二胺分光光度测定方法
- GB/T 15171-1994软包装件密封性能试验方法
- 医院转院证明样本图片(范文四篇)
- 外科护理学期末试卷3套18p
评论
0/150
提交评论