文档详情

Oracle9i关系数据库实用教程(第二版) 蔡立军及教学大纲 04新.ppt

发布:2015-12-12约7.39千字共67页下载文档
文本预览下载声明
本章内容 4.1 PL/SQL简介 4.2 PL/SQL语法 4.3 存储过程 4.4 触发器 4.5 游标 4.6 包 4.7 函数 2、预定义异常 表4-3 常见异常情况表 3、自定义异常 异常不一定必须是oracle返回的系统错误,用户可以在自己的应用程序中创建可触发及可处理的自定义异常,调用异常处理需要使用Raise语句。 异常情态的传播指的是当在程序块的声明、执行、异常部分分别出现异常情态时,或在本块中没有相应的异常处理器时会将这个异常情态传播到哪里,会去激发那个块中的处理器。传播规则是这样的: 当一个异常情态是在块的执行部分引发的(最常见的),PL/SQL使用下面的规则确定激活哪个异常处理器。 (1)若当前块对该异常情态设置了处理器,则执行它并成功完成该块的执行,然后控制转给包含块。 (2)若当前块没有该处理器,则通过在包含块中引发它来传播异常情态。然后对包含块执行PL/SQL的异常操作。另外,无论是在声明部分引发了一个异常情态,还是在异常处理部分引发,则该异常情态将立即传播给包含块。在包含块引用上述规则进行异常情态的处理,即使在当前块设置了OTHERS处理器也不会被执行。 一、 存储过程的创建 创建存储过程的语句如下: CREATE[OR REPLACE] PROCEDURE<过程名> <参数1,「方式l]<数据类型1, <参数2,[ 方式2]<数据类型2, ……) IS|AS is_或as完全等价 BEGIN PL/SQL过程体 END<过程名> 过程参数有以下三种类型: (1)in参数类型:表示输入给过程的参数。 (2)out参数类型:表示参数在过程中将被赋值,可以传给过程体的外部。 (3)in out参数类型:表示该类参数既可以向过程体传值,也可以在过程体中赋值,以便向过程体外传值。 二、存储过程的调用 存储过程可以直接用EXECUT命令调用或PL/SQL程序块内部调用。 用EXECUT命令调用存储过程的格式如下: SQLexecute proc_name(par1,par2…); 存储过程也可以被另外的PL/SQL块调用,调用的语句是: declare par1,par2; begin proc_name(par1,par2…); end; 在调用前要声明变量par1,par2 三、存储过程的释放   当某个存储过程不再需要时,应将其从内存中删除,以释放它占用的内存资源。释放过程的语句格式如下: SQLdrop procedure proc_name; proc_name为过程名。 四、实例 编写存储过程,显示所指定雇员名所在的部门名和位置。 CREATE OR REPLACE PROCEDURE DeptMesg(pename emp.ename%TYPE, pdname OUT dept.dname%TYPE,ploc OUT dept.loc%TYPE) AS BEGIN SELECT dname,loc INTO pdname,ploc FROM emp,dept WHERE emp.deptno=dept.deptno AND emp.ename=pename; END; / VARIABLE vdname VARCHAR2(14); VARIABLE vloc VARCHAR2(13); EXECUTE DeptMesg(SMITH,:vdname,:vloc); PRINT vdname vloc; (1)作用范围清晰 (2)不要让触发器去完成Oracle后台已经能够完成的功能 (3)限制触发器代码的行数 (4)不要创建递归的触发器 (5)触发器仅在被触发语句触发时进行集中的,全局的操作,同用户和数据库应用无关。 一、触发器的设计规则 可以创建被如下语句所触发的触发器: (1)DML语句(DELETE,INSERT,UPDATE); (2)DDL语句(CREATE,ALTER, DROP); (3)数据库操作(SERVERERROR,LOGON,LOGOFF,STARTUP,SHUTDOWN)。 二、触发器的类型 1.使用CREATE TRIGGER语句创建触发器 使用CREATE TRIGGER语句创建触发器的语句格式如下: CREATE[OR REPLACE] TRIGGER name {BEFORE|AFTER } {event [ OR ... ]} ON table [FOR[EACH ] {ROW|STATEMENT}] [WHEN(condition)] plsql block|call procedures_statement 三、 触发器的创建 2.注意事项 (1)触发器可以声明为在对记录进行操作之前,在之前(检查约束之前和 IN
显示全部
相似文档