版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
oracle异常及触发器0异常处理什么是异常情态异常处理处理的是运行时错误,异常分为预定义异常和用户自定义异常。声明异常情态异常情态在块的声明部分进行声明,在块的执行部分进行触发,在块的异常部分进行处理。用户定义类型异常情态,需要程序员自己定义代码,对异常情况进行处理。例:Declaree_toomanystudentsexception;1e_toomanystudents的作用域和本块的其他变量相同。预定义型异常情态预定义型异常情态可以直接使用,没有必要声明。Invalid_cursor:当执行非法的游标操作时,会引发这个错误,如试图关闭已关闭的游标。Cursor_already_open:试图打开已经打开的游标,会引发这个错误。No_data_found:当selectinto语句没有返回行时,和引用没有赋值过的pl/sql表的元素时会引发这个错误。Too_may_rows:当selectinto语句返回多个行时,会引发这个错误。Invalid_number:当试图从字符串转换为数值失败时,会引发这个错误,在过程性语句中会引发value_error错误。如:下面的语句引发invalid_number错误,因为‘x’不是数值。Insertintostudents(id,first_name,last_name)values(‘x’,’scott’,’smith’);2Storage_error和program_error:是内部的异常情态,通常不会引发他们。Value_error:当在过程性语句中发生了算术、转换、截尾或限制性错误时会引发这个情态。如果在sql语句中发生错误,会引发invalid_number错误。这个错误可能是一条赋值语句或selectinto语句的执行结果。下面的两个例子都引发value_error错误。Declarev_tempvarvarchar2(3);Beginv_tempvar:='ABCD';End;Declarev_tempvarnumber(2);Beginselectidintov_tempvarfromstudentswherelast_name='smith';End;3触发异常情态当预定义的异常情态错误发生时,就会触发该异常情态。用户定义的异常情态由raise语句触发。例:Declaree_toomanystudentsexceptionv_currentstudentsnumber(3);v_maxstudentsnumber(3);Beginselectcurrent_students,max_studentsintov_currentstudents,v_maxstudentsfromclasseswheredepartment=‘HIS’andcourse=‘101’;4ifv_currentstudents>v_maxstudentsthenraisee_toomanystudentsEndif;End;当引发异常情态时,控制转给该块的异常处理部分。如果没有异常处理部分,该异常处理部分将传给包含该块的块。一旦将控制转给异常处理部分,没有办法再将控制返回给该块的执行部分。处理异常情态异常部分的语法如下:Exceptionwhenexception_namethen处理错误语句序列whenexception_namethen处理错误语句序列whenothersthen处理错误语句序列end;5一个处理器可以对多个异常情态进行处理,用or连接例:Exceptionwhenno_data_foundortoo_many_rowstheninsertintolog_table(info)values(‘aselecterroroccurred’);End;Others异常处理器将对所有语法的异常情态进行处理,一般放在异常处理的最后,可以保证所有的错误都被检测到。Declaree_toomanystudentsexceptionv_currentstudentsnumber(3);v_maxstudentsnumber(3);v_errorcodenumber;v_errortextvarchar2(200);Beginselectcurrent_students,max_studentsintov_currentstudents,v_maxstudentsfromclasseswheredepartment=‘HIS’andcourse=‘101’;6ifv_currentstudents>v_maxstudentsthenraisee_toomanystudentsEndif;Exceptionwhene_toomanystudentstheninsertintolog_table(info)values(‘history101has’||v_currentstudents||‘students:maxallowedis‘||v_maxstudents);whenothersthenv_errorcode:=sqlcode;v_errortext:=substr(sqlerrm,1,200);insertintolog_table(info)values(‘anothererroroccurred’);end;*sqlcode和sqlerrm先被赋值给本地变量,然后这些变量在sql语句中被使用,sqlcode和sqlerrm不能直接在sql语句中使用,因为他们是过程性的函数。sqlcode返回当前的错误号,sqlerrm返回当前的错误信息正文。
7代码消息使用的sqlerrm函数0ora-0000:normal,successfulcompletionsqlerrm(0)+100Ora-1403:nodatafoundsqlerrm(100)+10User-definedexceptionSqlerrm(10)nullora-0000:normal,successfulcompletionsqlerrm-1Ora-0001:uniqueconstraint(.)violatedSqlerrm(-1)-54Ora-00054:resourcebusyandacquirebynowaitspecifiedSqlerrm(-54)8Exception_init可以将一个经过命名的异常情态与一个特别的oracle错误相联系。这样可以用when扑获此错误,不用others扑获。通过exception_initpragma实现的。其语法如下:Pragmaexception_init(exception_name,oracle_error_number)Pragma必须在声明部分例:下面的例子在运行时刻如遇到“ora-1400:mandatorynotnullcolumnmissingornullduringinsert”错误时,将引发e_missingnull异常情态。Declaree_missingnullexception;
pragmaexception_init(e_missingnull,-1400);Begininsertintostudents(id)values(null);Exceptionwhene_missingnulltheninsertintolog_table(info)values(‘ora-1400occurred’);End;9每次次发发生生pragmaexception_init时时,,一一个个oracle错错误误只只能能和和一一个个用用户户定定义义的的异异常常情情态态相相关关联联。。在在异异常常处处理理器器内内部部,,sqlcode和和sqlerrm将将返返回回发发生生oracle错错误误的的代代码码和和错错误误信信息息,,而而不不会会返返回回用用户户定定义义的的消消息息。。例::Declareex_hfyexception;Pragmaexception_init(ex_hfy,-1400);Begininsertintostudentsvalues(null);Exceptionwhenex_hfythendbms_output.put_line('不不能能把把空空值值插插入入到到非非空空列列');End;注意意,,这这里里-1400不不能能为为别别的的,,因因为为把把空空值值插插入入到到非非空空列列的的错错误误号号就就是是这这个个。。可可以以单单独独执执行行insert语语句句查查看看错错误误号号。。10使用用raise_application_error可以以用用raise_application_error创创建建自自己己的的错错误误消消息息,,这这比比命命名名的的异异常常情情态态更更具具有有说说明明性性。。其其语语法法如如下下::Raise_application_error(error_number,error_message,[keep-errors]);这里里error_number是是从从--20,000到到--20,999之之间间的的数数,,error_message是是与与此此错错误误相相关关的的错错误误正正文文。。Keep_errors为为布布尔尔值值,,如如果果他他为为true,,则则新新的的错错误误被被添添加加到到已已经经引引发发的的错错误误列列表表中中((如如果果有有的的话话))。。如如果果为为false((为为缺缺省省值值)),,则则新新的的错错误误将将替替换换错错误误的的当当前前列列表表。。例例::下下面面的的过过程程为为一一个个新新的的学学生生注注册册以以前前,,检检查查是是否否在在班班级级中中有有足足够够的的地地方方容容纳纳他他。。11Createorreplaceprocedureregister(p_studentidinstudents.id%type,p_departmentinclasses.department%type,p_courseinclasses.course%type)asv_currentstudentsnumber;v_maxstudentsnumber;Beginselectcurrent_students,max_studentsintov_currentstudent,v_maxstudentsfromclasseswheredepartment=p_departmentandcourse=p_course;12ifv_currentstudents+1>v_maxstudentsthenraise_application_error(-20000,‘can’’’taddmorestudentsto’||p_department||‘‘‘||p_course);endif;classpackage.addstudent(p_studentid,p_department,p_course);Exceptionwhenno_data_foundthenraise_application_error(-20001,p_department||‘‘||p_course||‘doesn’’’texist!’’);Endregister;以上程序运行行时,当没有有足够的空间间容纳新的学学生时,返回回ora-20000:can’’taddmorestudentstohis101错误消息。。13触发器综述触发器可以理理解为特殊的的存储过程。。当应用程序序用一条满足足触发器条件件的SQLDML语句句指向与触发发器相连接的的表时,Oracle将将自动执行该该触发器以执执行任务。DML触发器器,定义在对对数据库表的的操纵行为((insert,delete,update)上的触发发器。前触发器、后后触发器。语句触发、行行触发14触发器15触发器16触发器关于触发器中中的old和和new关键键字:old表示数数据操纵前的的值,old只对UPDATE和DELETE操作。new表示数数据操纵后的的值,new只对UPDATE和INSERT操作。17触发器定义的一般语语法:CREATE[ORREPLACE]TRIGGERtrigger{BEFORE|AFTER}{DELETE|INSERT|UPDATE[OFcolumn[,column]…]}[OR{DELETE|INSERT|UPDATE[OFcolumn[,column]……]}]…ONtableFOREACHROW[WHENcondition]BEGIN…pl/sqlblock..END[trigger]18触发器示例CREATEORREPLACETRIG
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030全球开放式框架工业显示器行业调研及趋势分析报告
- 2025年全球及中国平盘电滑环行业头部企业市场占有率及排名调研报告
- 2025-2030全球TGV基板行业调研及趋势分析报告
- 2025年全球及中国完全生物基聚酰胺行业头部企业市场占有率及排名调研报告
- 幼儿绘本讲述与演绎幼儿绘本讲述的停连运用技巧讲解
- 2025景区商场蛇年新春嘉年华活动策划方案
- 2025绿洲集团工程合同管理规范
- 沙石采购合同范本工程合同
- 2025【合同范本】打印机耗材长期供货合同
- 防雷技术服务合同
- 第2课+古代希腊罗马(教学设计)-【中职专用】《世界历史》(高教版2023基础模块)
- 中储粮兰州公司考试笔试题库
- 焊接机器人在汽车制造中应用案例分析报告
- 重建成长型思维课件
- 电捕焦油器火灾爆炸事故分析
- 质量问题分析及措施报告
- 汽修厂安全风险分级管控清单
- 现代通信原理与技术(第五版)PPT全套完整教学课件
- 病例展示(皮肤科)
- DB31T 685-2019 养老机构设施与服务要求
- 燕子山风电场项目安全预评价报告
评论
0/150
提交评论