《第7章 游标、存储过程、触发器和程序包.ppt》由会员分享,可在线阅读,更多相关《第7章 游标、存储过程、触发器和程序包.ppt(57页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Shenzhen lean-sigma consultant Co.,LTD 版权所有版权所有 翻版必究翻版必究1 1/41/411 1/57/57第第7 7章章 存储过程、触发器和程序包存储过程、触发器和程序包南京信息工程大学南京信息工程大学 计算机与软件学院计算机与软件学院XX XX(HK)LTD 2 2/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院2 2/57/57教学目的与要求教学目的与要求(1 1)熟练游标的使用
2、;)熟练游标的使用;(2 2)掌握过程和函数的创建、调用过程;)掌握过程和函数的创建、调用过程;(3 3)理解存储过程中各种形式的参数;)理解存储过程中各种形式的参数;(4 4)掌握触发器的概念、分类及特点;)掌握触发器的概念、分类及特点;(5 5)熟悉程序包规范和主体。)熟悉程序包规范和主体。XX XX(HK)LTD 3 3/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院3 3/57/577.1 7.1 游标游标7.2 7
3、.2 存储过程和函数存储过程和函数7.3 7.3 触发器触发器7.4 7.4 程序包程序包本章主要内容本章主要内容XX XX(HK)LTD 4 4/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院4 4/57/57教学重点与难点教学重点与难点(1 1)游标的使用)游标的使用(2 2)存储过程、函数的创建)存储过程、函数的创建(3 3)各种形式的参数)各种形式的参数(4 4)各种触发器的特点及使用)各种触发器的特点及使用XX X
4、X(HK)LTD 5 5/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院5 5/57/577.1 7.1 游标游标 游标的作用就相当于指针,通过游标程序设计语言就可以一次处理查询结果集中的一行。在Oracle中,游标可以分为两大类:静态游标和REF游标。REF游标是一种引用类型,类似于指针。而静态游标又可以分为隐式游标和显式游标。XX XX(HK)LTD 6 6/x/xNANJING UNIVERSITY OF INFORM
5、ATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院6 6/57/577.1.1 7.1.1 7.1.1 7.1.1 隐式游标隐式游标隐式游标隐式游标 在执行一个SQL语句时,Oracle会自动创建一个隐式游标。这个游标是内存中处理该语句的工作区域,在其中存储了执行SQL语句的结果。通过游标的属性可获知SQL语句的执行结果,以及游标的状态信息。u%FOUND:%FOUND:布尔型,如果SQL语句至少影响到一行数据,则该属性为TRUE,否则为FALSE。u%NOTFOUND:%NOTFOUND
6、:布尔型,与%FOUND相反。u%ISOPEN:%ISOPEN:布尔型,当游标已经打开时返回TRUE,否则为FALSE。u%ROWCOUNT:%ROWCOUNT:数值型,返回受SQL语句影响的行数。XX XX(HK)LTD 7 7/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院7 7/57/57XX XX(HK)LTD 8 8/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECH
7、NOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院8 8/57/57 游标的属性信息反映的是最新的SQL语句处理结果。在一个程序这出现多个SQL语句时,需要及时检查属性值。XX XX(HK)LTD 9 9/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院9 9/57/57 处理SQL语句返回的结果集时,需要使用CURSOR FOR LOOP语句通过隐式游标进
8、行处理。XX XX(HK)LTD 1010/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院1010/57/577.1.2 7.1.2 7.1.2 7.1.2 显式游标显式游标显式游标显式游标 在PL/SQL程序中处理结果集时,用户也可以通过显式定义游标,然后手动操作该游标处理结果集。使用显式游标处理数据需要的四个步骤:定义游标、打开游标、提取游标数据和关闭游标。XX XX(HK)LTD 1111/x/xNANJING UNI
9、VERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院1111/57/57(1 1)定义游标)定义游标 游标由游标名称和对应的SELECT结果集组成。与声明变量一样,定义游标也放在PL/SQL程序块的声明部分。CURSOR cursor_name(parameter,parameter)RETURN return_type IS select_statement;PARAMETER参数的格式:parameter_name in datatype:=|defau
10、lt expression注意:注意:在指定参数数据类型时,不能使用长度约束。XX XX(HK)LTD 1212/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院1212/57/57(2 2)打开游标)打开游标OPEN cursor_name(value,value);打开游标的过程包括两个步骤:u将符合条件的记录送入内存;u将指针指向第一条记录。XX XX(HK)LTD 1313/x/xNANJING UNIVERSITY
11、OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院1313/57/57(3 3)提取游标数据)提取游标数据 提取游标中的数据就是将检索到的结果数据保存到变量中,以便在程序中进行处理。可以使用FETCH语句从游标中提取数据。FETCH cursor_name INTO(variable_list|record_variable);在游标中包含了一个指针,最初打开游标时,指针指向结果集中的第一行。当使用FETCH语句提取数据时,游标中的指针会自动指向下一行。这样,可以在循环中
12、使用FETCH语句提取数据,使得每一次循环都会从结果集中读取一行数据。直到结果集中没有剩余的记录(%FOUND属性值为FALSE)。XX XX(HK)LTD 1414/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院1414/57/57(4 4)关闭游标)关闭游标 使用完游标后,用户必须显式关闭游标,以释放SELECT语句的查询结果。CLOSE cursor_name;XX XX(HK)LTD 1515/x/xNANJING
13、UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院1515/57/57XX XX(HK)LTD 1616/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院1616/57/577.1.3 7.1.3 7.1.3 7.1.3 游标游标游标游标FORFORFORFOR循环循环循环循环 游标
14、通常与循环联合使用。PL/SQL还提供了一种将两者综合在一起的语句,即游标FOR循环语句。游标FOR循环是显式游标的一种快捷使用方式,它使用FOR循环依次读取结果集中的数据。当FOR循环开始时,游标会自动打开(不需要使用OPEN方法),每循环一次系统自动读取游标当前行的数据(不需要使用FETCH),当退出FOR循环时,游标被自动关闭(不需要使用CLOSE)。for cursor_record in cursor_name loop statements;end loop;XX XX(HK)LTD 1717/x/xNANJING UNIVERSITY OF INFORMATION SICENCE
15、&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院1717/57/57XX XX(HK)LTD 1818/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院1818/57/577.2 7.2 存储过程和函数存储过程和函数 在很多时候,都需要保存PL/SQL程序块,以便随后可以重新使用。命名的PL/SQL程序块可被独立编译并存储在数据库中,任何与数据库
16、相连接的应用程序都可以访问这些存储的PL/SQL程序块。Oracle提供了四种类型的可存储的程序:过程、函数、触发器和程序包。XX XX(HK)LTD 1919/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院1919/57/577.2.1 7.2.1 7.2.1 7.2.1 存储过程存储过程存储过程存储过程 存储过程是一种命名的PL/SQL程序块,它可以接受零个或多个作为输入、输出或者既作输入又作输出的参数。过程被存储在数据
17、库中,并且存储过程没有返回值,存储过程不能由SQL语句直接使用,只能通过EXECUT命令或PL/SQL程序块内部调用。由于存储过程是已经编译好的代码,所以在调用的时候不必再次进行编译,从而提高了程序的运行效率。XX XX(HK)LTD 2020/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院2020/57/57(1 1)创建存储过程)创建存储过程 定义存储过程的语法如下:create or replace procedure
18、 proc_name(param,param,.)is local declarationsbegin execute statementsexception exception handlers end procedure _nameXX XX(HK)LTD 2121/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院2121/57/57注意:注意:(1)存储过程与匿名程序块类似,也包括三部分:声明部分、执行部分和异常处理部分
19、。(2)不能使用DECLARE关键字表示声明部分,IS关键字后声明的变量为过程体内的局部变量。(3)不能指定参数类型的长度和精度。(4)重新定义存储过程(同名),必须使用OR REPLACE选项,使新版本覆盖旧版本。(5)可以在PL/SQL程序块中调用存储过程,也可以直接在SQL*PLUS中使用EXECUTE语句调用。XX XX(HK)LTD 2222/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院2222/57/57XX
20、XX(HK)LTD 2323/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院2323/57/57XX XX(HK)LTD 2424/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院2424/57/57(2 2)参数)参数 Oracle有三种参数模式:IN、O
21、UT和IN OUT。nININ参数参数 该类型的参数值由调用者传入,并且只能被存储过程读取。这种参数模式是最常用的,也是默认的参数模式。XX XX(HK)LTD 2525/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院2525/57/57 在调用存储过程时,有三种向其传递参数的方法:名称表示法、位置表示法和混合表示法。1 1)名称表示法)名称表示法 名称表示法是指为各个参数传递参数值时指定传入数值的参数名。具体格式如下:pr
22、ocedure_name(param_name=value,param_name=value);优点:优点:明确指定了向各个参数传递的值,在调用过程时就不需要再考虑创建过程时定义的参数顺序。XX XX(HK)LTD 2626/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院2626/57/572 2)位置表示法)位置表示法 当参数比较多时,通过名称表示法调用过程会非常长,此时可以采用位置表示法。采用位置表示法传递参数时,用户提
23、供的参数值顺序必须与过程定义中的参数顺序一致。XX XX(HK)LTD 2727/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院2727/57/573 3)混合表示法)混合表示法 名称表示法和位置表示法各有优缺点,为了弥补这两者的不足,还可以采用混合表示法,以发挥两者的优点。注意:注意:当切换为名称表示法传递参数后,后续的参数也必须使用名称表示法。XX XX(HK)LTD 2828/x/xNANJING UNIVERSITY
24、 OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院2828/57/57nOUTOUT参数参数 OUT类型的参数由存储过程传入值,然后由调用者接收参数值。XX XX(HK)LTD 2929/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院2929/57/57 由于过程要通过OUT参数返回值,所以在调用时必
25、须提供能够接收返回值的变量。即使OUT参数在定义过程时没有设置返回值,调用时也必须为其提供接收变量。XX XX(HK)LTD 3030/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院3030/57/57 在使用SQL*PLUS调用具有OUT参数的过程时,需要使用VARIABLE命令绑定参数值。为了查看执行结果,可以使用PRINT命令显示变量值,也可以通过SELECT语句检索绑定的变量值。XX XX(HK)LTD 3131/x
26、/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院3131/57/57nIN OUTIN OUT参数参数 IN OUT类型的参数同时具有IN参数和OUT参数的特性,在调用过程时既可以向该类型的参数传入值,也可以从该参数接收值;而在过程的执行过程中,既可以读取又可以写入该类型参数。XX XX(HK)LTD 3232/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7
27、7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院3232/57/57(3 3)默认值)默认值 存储过程的参数也可以有默认值,这样当调用该过程时,如果未向参数传入值,则该参数将使用定义的默认值。注意:注意:只能给IN参数设置默认值。XX XX(HK)LTD 3333/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院3333/57/57(4 4)过程中的事务处理)过程中的事务处理
28、 当在SQL*Plus中进行操作时,用户可以使用COMMIT语句将在事务中的所有操作“保存”到数据库中。如果用户需要撤销所有的操作,则可以使用ROLLBACK语句回退事务中未提交的操作,使数据库返回到事务处理开始前的状态。在PL/SQL过程中,不仅可以包括插入和更新这类的DML操作,还可以包括事务处理语句COMMIT和ROLLBACK。Oracle支持事务的嵌套,即在事务处理中进行事务处理。在嵌套的事务处理过程中,子事务可以独立于父事务处理进行提交和回滚。XX XX(HK)LTD 3434/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOL
29、OGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院3434/57/577.2.2 7.2.2 7.2.2 7.2.2 函数函数函数函数 函数与过程非常类似,它也是一种存储在数据库中的命名程序块,并且函数也可以接受零个或多个输入参数。函数与过程之间的主要区别在于,函数必须有返回值,并且可以作为一个表达式的一部分,函数不能作为一个完整的语句使用。函数返回值的数据类型在创建函数时定义。create or replace function func_name(param,param)return data_type is local de
30、clarationsbegin execute statementsexception exception handlersend func_nameXX XX(HK)LTD 3535/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院3535/57/57XX XX(HK)LTD 3636/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程
31、、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院3636/57/577.3 7.3 触发器触发器 触发器是关系数据库系统提供的一项技术,触发器类似过程和函数,它们都包括声明部分,执行逻辑处理部分和异常处理部分,并且都被存储在数据库中。XX XX(HK)LTD 3737/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院3737/57/577.3.1 7.3.1 7.3.1 7.3.1 触发器概述触发
32、器概述触发器概述触发器概述 触发器是与一个表或数据库事件联系在一起的,当特定事件出现时将自动执行触发器的代码块。触发器与过程(或函数)的区别在于:(1)过程是由用户或应用程序显式调用的,而触发器是不能被直接调用的。(2)在创建触发器时需要指定触发器的执行时间和触发事件。XX XX(HK)LTD 3838/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院3838/57/57create or replace trigger tr
33、igger_name before|after|instead of trigger_event on table_name for each row when trigger_condition begin trigger_bodyend trigger_name;注意:注意:各主要参数的含义。XX XX(HK)LTD 3939/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院3939/57/57 Oracle对触发器的功能
34、进行了扩展,不仅对表和视图的DML操作会引起触发器的运行,而且对Oracle系统的操作也会引发触发器的运行。根据触发器的触发事件和执行情况,可以将Oracle所支持的触发器分为如下几种类型:(1 1)行级触发器)行级触发器 (2 2)语句级触发器)语句级触发器 (3 3)INSTEAD OFINSTEAD OF触发器:触发器:视图上 (4 4)系统事件触发器)系统事件触发器:系统事件触发(如启动与关闭)(5 5)用户事件触发器:)用户事件触发器:与DDL或用户的登录/注销等事件相关XX XX(HK)LTD 4040/x/xNANJING UNIVERSITY OF INFORMATION SI
35、CENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院4040/57/577.3.2 7.3.2 7.3.2 7.3.2 语句级触发器语句级触发器语句级触发器语句级触发器 如果在创建触发器时未使用FOR EACH ROW子句,则创建的触发器为语句级触发器。语句级触发器在被触发后只执行一次,而不管这一操作会影响到数据库中多少行记录。XX XX(HK)LTD 4141/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发
36、器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院4141/57/57 如何确定是哪个语句(操作类型)激活了触发器?XX XX(HK)LTD 4242/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院4242/57/57 为了确定触发事件的类型,可以使用条件谓词。条件谓词是由一个关键字IF和谓词INSERTING、UPDATING和DELETING组成。如果值为真,那么就是相应类型的语句触发了触发器。此外
37、,还可以在UPDATE触发器中使用条件谓词,判断特定列是否被更新。begin if inserting then -insert语句触发语句触发 elsif updating then -update语句触发语句触发 elsif deleting then -delete语句触发语句触发 end if;end;if updating(job)then -do somethingend if;XX XX(HK)LTD 4343/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触
38、发器和程序包序包计算机与软件学院计算机与软件学院4343/57/57XX XX(HK)LTD 4444/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院4444/57/57XX XX(HK)LTD 4545/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院45
39、45/57/577.3.3 7.3.3 7.3.3 7.3.3 行级触发器行级触发器行级触发器行级触发器 如果在创建触发器时使用了FOR EACH ROW选项,则创建的触发器为行级触发器。对于行级触发器而言,当一个DML语句操作影响到数据库中的多行数据时,行级触发器会针对每一行执行一次。XX XX(HK)LTD 4646/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院4646/57/57XX XX(HK)LTD 4747/x
40、/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院4747/57/57XX XX(HK)LTD 4848/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院4848/57/577.3.4 INSTEAD OF 7.3.4 INSTEAD OF 7.3.4 INSTE
41、AD OF 7.3.4 INSTEAD OF 触发器触发器触发器触发器 INSTEAD OF 触发器也称替代触发器,定义INSTEAD OF触发器后,用户对表的DML操作将不再被执行,而是执行触发器主体中的操作。通常情况下,INSTEAD OF触发器是定义在视图上的,而不是在表上定义的触发器,它是用来替换所使用实际语句的触发器。XX XX(HK)LTD 4949/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院4949/57/
42、57XX XX(HK)LTD 5050/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院5050/57/577.3.5 7.3.5 7.3.5 7.3.5 用户事件触发器用户事件触发器用户事件触发器用户事件触发器 用户事件触发器是建立在模式级的操作上的触发器。激活该类型触发器的用户事件包括:CREATE、ALTER、DROP、ANALYZE、ASSOCIATE STATISTICS、DISASSOCIATE、STATISTIC
43、S、COMMENT、GRANT、REVOKE、RENAME、TRUNCATE、LOGOFF、SUSPEND和LOGON。XX XX(HK)LTD 5151/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院5151/57/57XX XX(HK)LTD 5252/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触
44、发器和程序包序包计算机与软件学院计算机与软件学院5252/57/577.4 7.4 程序包程序包 程序包其实就是被组合在一起的相关对象的集合,当程序包中任何函数或存储过程被调用时,程序包就被加载入到内存中,这样程序包中的任何函数或存储过程的子程序访问速度将大大加快。例如,在PL/SQL程序中,为了输出运行结果,在程序的代码中使用了DBMS_OUTPT.PUT_LINE语句。事实上,这是调用程序包DBMS_OUTPUT中的PUT_LINE过程。程序包由两部分组成:规范和包主体。在规范中描述程序包所使用的变量、常量、游标和子程序;程序包主体则完成定义子程序和游标。XX XX(HK)LTD 5353
45、/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院5353/57/577.4.1 7.4.1 7.4.1 7.4.1 程序包规范程序包规范程序包规范程序包规范 对于程序包,规范就像一个说明书,它说明了在程序包中哪些过程或函数可以使用、如何使用。程序包规范必需的,并且必须在程序包主体之前创建。create or replace package package_name is public_variable_declaration
46、s public_type_declarations public_exception_declarations public_cursor_declarations function_declarations procedure_specificationsend package_name XX XX(HK)LTD 5454/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院5454/57/577.4.2 7.4.2 7.4.
47、2 7.4.2 程序包主体程序包主体程序包主体程序包主体 程序包主体包含了在规范中声明的过程和函数的实现代码,程序包主体的名称必须与规范的名称相同,这个相同的名称将规范与主体结合在一起组成程序包。另外,程序包主体中定义的过程和函数的名称、参数和返回值等必须与规范中声明的完全区配。XX XX(HK)LTD 5555/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院5555/57/577.4.3 7.4.3 7.4.3 7.4.3
48、 重载重载重载重载 PL/SQL允许两个或多个包级子程序拥有相同的名称,这就是PL/SQL程序的重载。在通常情况下,在程序包中的过程和函数必须具有惟一的名称,用于惟一表示一个过程和函数。PL/SQL允许重载,也就是在程序包中的过程和函数可以具有相同的名称,但只需它们的特性有所区别。XX XX(HK)LTD 5656/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院5656/57/57本章小结本章小结游标游标存储过程和函数存储过程和函数触发器触发器程序包程序包XX XX(HK)LTD 5757/x/xNANJING UNIVERSITY OF INFORMATION SICENCE&TECHNOLOGY第第7 7章章 游标、存储过程、触发器和程游标、存储过程、触发器和程序包序包计算机与软件学院计算机与软件学院5757/57/57本章习题本章习题P173P173:一、填空题一、填空题二、选择题二、选择题三、简答题:三、简答题:1 1,7 7