oracle异常和游标管理

上传人:45****2h 文档编号:253088085 上传时间:2024-11-28 格式:PPTX 页数:35 大小:117.09KB
返回 下载 相关 举报
oracle异常和游标管理_第1页
第1页 / 共35页
oracle异常和游标管理_第2页
第2页 / 共35页
oracle异常和游标管理_第3页
第3页 / 共35页
点击查看更多>>
资源描述
*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,异常和游标管理,第七章,1,目标,详细讨论异,常,常,游标管理技,巧,巧,2,异常 8,-,1,程序错误,编译时,运行时,异常,处理运行时,错,错误,3,PL/SQL,是如何处理,异,异常的?,错误引发异,常,常,每当引发异,常,常时,都将,控,控制权传递,给,给异常处理,程,程序,异常处理程,序,序处理异常,异常8,-,2,4,异常中涉及,的,的步骤,声明异常,引发异常,处理异常,Declare,Begin,Exception,End;,异常 8,-,3,5,异常的类型,预定义的异,常,常,非预定义的,异,异常,用户定义的,异,异常,异常 8,-,4,6,预定义的异,常,常,由,Oracle,为常见错误,预,预定义,在,DBMS_STANDARD,程序包中提供了这,些,些定义,不需要显式,声,声明,预定义的异,常,常,7,预定义的异,常,常,declare,var_statusorder_master.ostatus%type;,begin,select ostatusintovar_statusfromorder_master;,dbms_output.put_line(var_status);,-exception,-when too_many_rows then,-dbms_output.put_line(,查询返回不,止,止一行,);,end;,在,Oracle,中无法从引,发,发异常的位,置,置继续处理,。,。,8,预定义的异,常,常,exception,when,then,when,then,whenothersthen,end;,预定,义,义异,常,常列,表,表:,参,参考,课,课本,page170,9,非预,定,定义,的,的异,常,常,指定,与,与,Oracle,错误,关,关联,的,的异,常,常,关联,是,是通,过,过,PRAGMAEXCEPTION_INIT,编译,指,指示,建,建立,的,的,PRAGMAEXCEPTION_INIT,通知,编,编译,器,器使,异,异常,名,名称,与,与标,准,准的,oracle,服务,器,器错,误,误编,号,号关,联,联。,非预,定,定义,的,的异,常,常,10,非预,定,定义,的,的异,常,常,declare,dup_rowexception;,pragmaexception_init(dup_row,-1422);,var_statusorder_master.ostatus%type;,begin,selectostatusintovar_statusfromorder_master;,dbms_output.put_line(var_status);,exception,whendup_rowthen,dbms_output.put_line(,返回,行,行数,超,超过,一,一行,);,end;,11,用户定义的异常,由程序定义的错,误,误,在声明部分中声,明,明,类型,EXCEPTION,声明用户定义的,异,异常,是使用,RAISE,语句显式引发的,用户定义的异常,12,用户定义的异常,参考课本举例page173.,13,Raise_Application_Error,创建用户定义的,错,错误消息,用户,定,定义的错误消息,可,可以比指定的异,常,常描述的更详细,。,。,既可以在可执行,部,部分中使用,也,可,可以在异常部分,中,中使用,错误编号必须介,于,于,20000 和,20999 之,间,间,错误消息的长度,可,可长达 2048 个字节,定义错误消息,14,定义错误消息,declare,dup_rowexception;,pragmaexception_init(dup_row,-1422);,var_status order_master.ostatus%type;,begin,selectostatusinto var_status fromorder_master;,dbms_output.put_line(var_status);,exception,when dup_row then,raise_application_error(-20001,返回行数超过一,行,行,true);,end;,15,游标,游标,指向上下文区域的句柄或指针,上下文区域,-,用于,SQL,处理的内存区,上下文区域的内,容,容,语句处理的行数,指向语句的语法,分,分析表示的指针,16,游标类型,游标类型,静态游标,隐式游标,显式游标,REF,游标,17,隐式游标,隐式游标,PL/SQL,为所有,DML,将打开一个隐式,游,游标,在,SQL,操作完成后,关,闭,闭游标。,18,游标属性,%NOTFOUND,:,true,表示,DML,语句不返回任何,行,行。,%FOUND,:,true,表示,DML,语句影响一行或,者,者多行。,%ROWCOUNT,:统计,DML,语句返回的行数,。,。,%ISOPEN,:在,DML,语句执行之后,,始,始终为,false,。,隐式游标,19,隐式游标,begin,deletefrom order_master where orderno=o201;,if,sql%notfound,then,dbms_output.put_line(,未找到,值,值,);,else,dbms_output.put_line(,找到并,删,删除之,);,endif;,end;,20,隐式游,标,标,declare,order_noorder_master.orderno%type;,begin,selectordernointo order_no fromorder_master,whereorderno=o001;,ifsql%rowcount 0then,dbms_output.put_line(sql%rowcount);,dbms_output.put_line(,从中选,择,择行,);,else,dbms_output.put_line(,从中未,选,选择行,);,endif;,end;,21,显式游,标,标,由用户,显,显式声,明,明,游标将,指,指向活,动,动集中,的,的当前,行,行,控制显,式,式游标,Open,:执行,查,查询,,并,并将游,标,标指针,置,置于第,一,一行。,Fetch,:游标指针,前,前进到下一,行,行。,Close,:关闭游标,。,。,显式游标,22,显式游标,declare,icodeorder_detail.itemcode%type;,cursor a is select itemcode from order_detail,where orderno=o001;,begin,opena;,loop,fetch aintoicode;,update itemfilesetitemrate=22.5where,itemcode=icode;,exitwhen a%notfound;,endloop;,dbms_output.put_line(,项费率已,经,经更新,);,close a;,end;,23,显式游标,declare,order_noorder_detail.orderno%type;,cursor aisselect orderno fromorder_detail,where itemcode=i205;,begin,opena;,loop,fetch aintoorder_no;,update order_mastersetostatus=D,where orderno=order_no;,exitwhena%notfound;,endloop;,close a;,end;,24,显式游标,declare,cursor testis select*fromorder_detail,where orderno=o001;,myorderorder_detail%rowtype;-,声明游标,begin,opentest;-,打开游标,loop,fetch test intomyorder;-,操作游标,exitwhen test%notfound;,endloop;,dbms_output.put_line(,从表中获,取,取的行数,为,为:,|test%rowcount);,close test;-,关闭游标,end;,25,显式游标,declare,cursor mycurisselect*from order_master;,begin,if notmycur%isopenthen,dbms_output.put_line(,游标尚未,被,被打开,);,endif;,openmycur;,ifmycur%isopenthen,dbms_output.put_line(,游标已经,打,打开,);,endif;,close mycur;,end;,26,查询嵌套,表,表中数据,的,的游标,举例,27,循环游标,显式游标,的,的替代方,法,法,它的工作,原,原理是什,么,么?,隐式打开,游,游标,自动从活,动,动集获取,行,行,在处理完,所,所有行时,关,关闭游标,优点,简化代码,的,的编写,循环游标,28,循环游标,-,使用循环,游,游标删除,特,特定供应,商,商的所有,订,订单,declare,cursor for_cur is selectordernofrom order_master,where vencode=v002;,begin,forcust_recinfor_curloop,delete fromorder_detailwhere orderno=cust_rec.orderno;,endloop;,dbms_output.put_line(,供应商,v002,的所有订,单,单被取消,);,commit;,end;,29,游标变量,类,类似于,PL/SQL,变量,可,以,以在运行,时,时接纳不,同,同的值。,定义游标,变,变量类型,的,的语法,typetype_name isrefcursor return return_type;,声明游标,变,变量,ref_vartype;,REF,游标,30,游标变量,强游标,(,有约束,),、弱游标,(,无约束,),当声明的,游,游标变量,类,类型有返,回,回类型的,时,时候,称,为,为强游标,。,。没有返,回,回类型的,游,游标变量,称,称为弱游,标,标。,Type t_add_ref isref cursor returnvendor_master%rowtype;,Type t_add_ref isref cursor;,31,使用游标变量,在运行时使不,同,同的语句与之,关,关联,Open cursor_variable forselect_statement;,32,游标变量举例,declare,type r1_curis refcursor;,var1 r1_cur;,ono varchar2(5);,no varchar2(20);,qord number;,begin,no:=gf;,if upper(no)=ORDERNOthen,open var1 for,selectorderno from order_master,wherevencode=v001;,fetchvar1 into ono;,dbms_output.put_line(,订单号,|ono);,closevar1;,else,open var1 for,selectqty_ord from order_detail,whereorderno=o001;,loop,fetchvar1 into qord;,exit when var1%notfound;,dbms_output.put_line(,订购数量是,|qord);,end loop;
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 幼儿教育


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!