存储过程1--清华大学计算中心ORACLE培训资料

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

存储过程、包、数据库触发器设计(Oracle9iProceduralOption)《Oracle9iPL/SQL程序设计》存储过程与应用级存储过程的区别1.存储于数据库中2.文档存储在数据字典3.可以被应用、及开发工具调用4.可以被其他存储过程调用1.存储于Form应用中2.文档可以从应用中得到3.只可以由Form调用4.可以调用存储过程StorageProcedureFormProcedure创建存储过程(CreateProcedure)CreateorReplaceProcedure过程名(变量数据类型)变量定义;Begin…End过程名;过程体可以省略INOUTINOUTISAS缺省创建函数(CreateFunction)CreateorReplaceFunction函数名(变量数据类型)变量定义;Begin…Return值;End函数名;可以省略INOUTINOUTISASReturn数据类型缺省5存储过程例外处理(EXCEPTION)在PL/SQL中,警告信息、出错信息、或返回信息统称为例外(Exception)。Oracle中有两种类型的例外。预定义的例外:是由PL/SQL运行过程中,系统自动产生的信息。用户自定义例外:是用户根据需要,自己定义使用的例外,执行时由用户自己引起。Oracle预定义的常用例外:CURSOR_ALREADY_OPENVALUE_ERRORNO_DATA_FOUNDINVALID_NUMBERTOO_MANY_ROWSZERO_DIVIDEINVALID_CURSOR用户自定义例外用户定义的例外必须在DECLARE段中说明,在Begin段中用RAISE引起,在EXCEPTION段中使用。SQL语句执行结果:在处理SQL时,这类消息所使用的SQL语句包括:INSERT,UPDATE,DELETE子句。执行结果属性:SQL%FOUNDSQL%NOTFOUNDSQL%ROWCOUNT例外处理方法:Beginupdateempsetsal=1200whereempno=1234;ifSQL%NOTFOUNDtheninsertintoErrors(empno,sal)values(1234,1200);endif;End;存储过程例外处理(EXCEPTION)7存储过程例外处理(EXCEPTION)例外的使用DeclareBeginExceptionWhenNO_DATA_FOUNDTHEN…WhenCURSOR_ALREADY_OPENTHENWhenTOO_MANY_ROWSTHEN...…WhenOTHERSTHEN...END;例外段在Exception段中对返回信息一一作出响应8存储过程例外处理(EXCEPTION)用户定义例外的使用Declareout_of_rangeEXCEPTION;Begin…ifv_salMAX_SALthenRAISEout_of_range;endif;…ExceptionWhenNO_DATA_FOUNDTHEN…WhenCURSOR_ALREADY_OPENTHENWhenTOO_MANY_ROWSTHEN...Whenout_of_rangeTHEN...END;例外段在Declare段定义在Begin段中引起在Exception段中使用Package包的设计创建包(CreatePackage)CreateorReplacePackage包名Procedure过程名();Function函数名()Return数据类型;变量定义;例外定义;光标定义;……;End包名;定义公共元素ISAS创建包体(CreatePackageBody)CreateorReplacePackageBody包名Procedure过程定义;Procedure过程定义;Function函数定义;Function函数定义;……;End包名;ISAS创建包创建包体1----定义过程创建包体23----定义过程包的调用OracleDatabaseTrigger数据库触发器设计17数据库触发器作用防止非法的数据库操纵、维护数据库安全对数据库的操作进行审计,存储历史数据完成数据库初始化处理控制数据库的数据完整性进行相关数据的修改完成数据复制自动完成数据库统计计算限制数据库操作的时间、权限等,控制实体的安全性。18数据库触发器与存储过程比较:数据库触发器是在进行数据操纵时自动触发的,存储过程要通过程序调用。在数据库触发器中可以调用存储过程、函数。在触发器中禁止使用COMMIT、ROLLBACK语句,存储过程中可以使用PL/SQL中可以使用的全部SQL语句。在触发器中不得间接调用含有COMMIT、ROLLBACK语句的存储过程。创建语句级触发器CreateorReplaceTrigger触发器名BeforeInsertAfterDeleteOn表名Update{of}Declare…….Begin……End;PL/SQL块SQL创建行级触发器CreateorReplaceTrigger触发器名BeforeInsertAfterDeleteOn表名Update{of}FOREACHROWDeclare…….Begin……End;PL/SQL块SQL21创建行级触发器:当触发器已经存在时,使用Replace选项。Update中的of是可选项,用于指定Update语句要修改的列。根据进行一个操作时触发器的触发次数决定是用语句级、还是行级触发器。当某一操作结果只影响一行时,语句级触发器与行触发器效果相同。当操作影响到数据库多行数据时,语句级触发器只触发一次,而行级触发器触发多次。

1 / 21
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功