游标、存储过程和触发器_数据库课件_第1页
游标、存储过程和触发器_数据库课件_第2页
游标、存储过程和触发器_数据库课件_第3页
游标、存储过程和触发器_数据库课件_第4页
游标、存储过程和触发器_数据库课件_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第1010章章 游标、存储过程和触发器游标、存储过程和触发器 介绍介绍Oracle数据库程序设计中经常会用到的数据库程序设计中经常会用到的3个概念,即游标、个概念,即游标、存储过程和触发器。存储过程和触发器。第第1010章章 游标、存储过程和触发器游标、存储过程和触发器本章学习目标本章学习目标 理解游标的基本概念;理解游标的基本概念; 掌握游标的基本操作、属性操作和循环游标;掌握游标的基本操作、属性操作和循环游标; 掌握掌握PL/SQL语言的三种存储过程;语言的三种存储过程; 理解触发器的概念,掌握创建和使用触发器的理解触发器的概念,掌握创建和使用触发器的方法;方法; 第第1010章章 游标

2、、存储过程和触发器游标、存储过程和触发器本章知识点本章知识点 游标游标 存储过程管理存储过程管理 触发器管理触发器管理 第第1010章章 游标、存储过程和触发器游标、存储过程和触发器游标游标 游标的基本概念游标的基本概念 游标控制语句游标控制语句 游标属性游标属性 游标游标FOR循环循环 第第1010章章 游标、存储过程和触发器游标、存储过程和触发器游标的基本概念游标的基本概念游标:游标:游动的光标。游标是映射在结果集中一行数游动的光标。游标是映射在结果集中一行数据上的位置实体,有了游标,用户就可以访问结果据上的位置实体,有了游标,用户就可以访问结果集中的任意一行数据了。将游标放置到某行后,即

3、集中的任意一行数据了。将游标放置到某行后,即可对该行数据进行操作,最常见的操作是提取当前可对该行数据进行操作,最常见的操作是提取当前行数据。游标分两种:行数据。游标分两种: 显式游标显式游标 隐式游标隐式游标第第1010章章 游标、存储过程和触发器游标、存储过程和触发器游标的基本概念游标的基本概念 游标示意图游标示意图 游标游标第第1010章章 游标、存储过程和触发器游标、存储过程和触发器游标的基本概念游标的基本概念隐式游标隐式游标 不需要声明,使用时也不需要执行打开和关闭操作。不需要声明,使用时也不需要执行打开和关闭操作。实际上,就是在实际上,就是在Select语句中增加了语句中增加了INT

4、O子句,把结果集自动读取子句,把结果集自动读取到指定的比变量中。到指定的比变量中。【例】使用【例】使用SELECT语句声明隐式游标,从语句声明隐式游标,从Students表中表中读取读取Sname字段的值到变量字段的值到变量VSname:DECLARE VSname Students.Sname%Type;BEGINSELECT Sname INTO VSnameFROM StudentsWHERE Sdept=Automation;dbms_output.put_line(VSname);END;第第1010章章 游标、存储过程和触发器游标、存储过程和触发器游标的基本概念游标的基本概念 显式

5、游标显式游标 显式游标需要声明,在使用之前需显式游标需要声明,在使用之前需要打开游标,使用完成后要关闭游标。使用显式要打开游标,使用完成后要关闭游标。使用显式游标的步骤包括:游标的步骤包括: (1)声明游标。)声明游标。 (2)打开游标。)打开游标。 (3)读取数据。)读取数据。 (4)关闭游标。)关闭游标。第第1010章章 游标、存储过程和触发器游标、存储过程和触发器游标控制语句游标控制语句 (1)声明游标语句)声明游标语句CURSOR:DECLARE CURSOR () IS;【例】声明一个游标【例】声明一个游标MyCur,读取指定类型的,读取指定类型的用户信息:用户信息:DECLARE

6、CURSOR MyCur(varType NUMBER) IS SELECT UserId, UserName FROM Users WHERE UserType = varType;第第1010章章 游标、存储过程和触发器游标、存储过程和触发器游标控制语句游标控制语句(2)打开游标语句)打开游标语句OPEN:OPEN () ;【例】打开游标【例】打开游标MyCur,读取类型为,读取类型为1的用户信的用户信息:息:OPEN MyCur(1);第第1010章章 游标、存储过程和触发器游标、存储过程和触发器游标控制语句游标控制语句(3)游标取值语句)游标取值语句FETCH。游标取值语句。游标取值语

7、句FETCH的基本语法结构如下:的基本语法结构如下:FETCH INTO ;【例】在打开的游标MyCur的当前位置读取数据:FETCH MyCur INTO varId,varName;(4)关闭游标语句)关闭游标语句CLOSE:CLOSE ;【例】关闭游标MyCur:CLOSE MyCur;第第1010章章 游标、存储过程和触发器游标、存储过程和触发器游标控制语句游标控制语句【例】下面介绍一个完整的游标应用实例:【例】下面介绍一个完整的游标应用实例:/* 打开显示模式打开显示模式 */SET ServerOutput ON; DECLARE -开始声明部分开始声明部分 varId NUMBE

8、R; -声明变量声明变量,用来保存游标中的用户编号用来保存游标中的用户编号 varName VARCHAR2(50); -声明变量声明变量,用来保存游标中的用户名用来保存游标中的用户名 -定义游标定义游标, varType为参数为参数, 指定用户类型编号指定用户类型编号 CURSOR MyCur(varType NUMBER) IS SELECT UserId, UserName FROM Users WHERE UserType = varType;BEGIN -开始程序体开始程序体 OPEN MyCur(1); -打开游标打开游标,参数为参数为1,表示读取用户类型编号为表示读取用户类型编号

9、为1的记录的记录 FETCH MyCur INTO varId, varName; -读取当前游标位置的数据读取当前游标位置的数据 CLOSE MyCur; -关闭游标关闭游标 dbms_output.put_line(用户编号用户编号: | varId |, 用户名用户名: | varName); -显示读取的显示读取的数据数据END; -结束程序体结束程序体第第1010章章 游标、存储过程和触发器游标、存储过程和触发器The End第第1010章章 游标、存储过程和触发器游标、存储过程和触发器第第1010章章 游标、存储过程和触发器游标、存储过程和触发器游标属性游标属性 (1)%ISOPE

10、N属性属性 判断游标是否被打开,如果打开,则判断游标是否被打开,如果打开,则%ISOPEN等于等于TRUE,否则等于,否则等于FALSE。【例】下面的代码演示当使用未打开的游标时,将会出现错误:【例】下面的代码演示当使用未打开的游标时,将会出现错误:/* 打开显示模式打开显示模式 */SET ServerOutput ON; DECLARE -开始声明部分开始声明部分 varName VARCHAR2(50); -声明变量声明变量,用来保存游标中的用户名用来保存游标中的用户名 varId NUMBER; -声明变量声明变量,用来保存游标中的用户编号用来保存游标中的用户编号 -定义游标定义游标,

11、 varType为参数为参数, 指定用户类型编号指定用户类型编号 CURSOR MyCur(varType NUMBER) IS SELECT UserId, UserName FROM Users WHERE UserType = varType;BEGIN -开始程序体开始程序体 FETCH MyCur INTO varId, varName; -读取当前游标位置的数据读取当前游标位置的数据 CLOSE MyCur; -关闭游标关闭游标 dbms_output.put_line(用户编号用户编号: | varId |, 用户名用户名: | varName); -显示读显示读取的数据取的数据

12、END; -结束程序体结束程序体第第1010章章 游标、存储过程和触发器游标、存储过程和触发器游标属性游标属性【例】修改上面的程序,在使用游标之前,调用【例】修改上面的程序,在使用游标之前,调用%ISOPEN属性判断游标是否打开。属性判断游标是否打开。/* 打开显示模式打开显示模式 */SET ServerOutput ON; DECLARE -开始声明部分开始声明部分 varName VARCHAR2(50); -声明变量声明变量,用来保存游标中的用户名用来保存游标中的用户名 varId NUMBER; -声明变量声明变量,用来保存游标中的用户编号用来保存游标中的用户编号 -定义游标定义游标

13、, varType为参数为参数, 指定用户类型编号指定用户类型编号 CURSOR MyCur(varType NUMBER) IS SELECT UserId, UserName FROM Users WHERE UserType = varType;BEGIN -开始程序体开始程序体 IF MyCur%ISOPEN = FALSE Then OPEN MyCur(2); END IF; FETCH MyCur INTO varId, varName; -读取当前游标位置的数据读取当前游标位置的数据 CLOSE MyCur; -关闭游标关闭游标 dbms_output.put_line(用户编

14、号用户编号: | varId |, 用户名用户名: | varName); -显示读取的数据显示读取的数据END; -结束程序体结束程序体第第1010章章 游标、存储过程和触发器游标、存储过程和触发器游标属性游标属性(2)%FOUND属性和属性和%NOTFOUND属性属性 %FOUND属性用来判断游标所在的行是否有效,如果有效,属性用来判断游标所在的行是否有效,如果有效,返回返回TRUE,无效时返回,无效时返回FALSE。【例】%FOUND属性可以循环执行游标读取数据:/* 打开显示模式打开显示模式 */SET ServerOutput ON; DECLARE -开始声明部分开始声明部分 va

15、rName VARCHAR2(50); -声明变量声明变量,用来保存游标中的用户名用来保存游标中的用户名 varId NUMBER; -声明变量声明变量,用来保存游标中的用户编号用来保存游标中的用户编号 -定义游标定义游标, varType为参数为参数, 指定用户类型编号指定用户类型编号 CURSOR MyCur(varType NUMBER) IS SELECT UserId, UserName FROM Users WHERE UserType = varType;BEGIN -开始程序体开始程序体 IF MyCur%ISOPEN = FALSE Then OPEN MyCur(1); E

16、ND IF; FETCH MyCur INTO varId, varName; -读取当前游标位置的数据读取当前游标位置的数据 WHILE MyCur%FOUND -如果当前游标有效,则执行循环如果当前游标有效,则执行循环 LOOP dbms_output.put_line(用户编号用户编号: | varId |, 用户名用户名: | varName); -显示读取的数据显示读取的数据 FETCH MyCur INTO varId, varName; -读取当前游标位置的数据读取当前游标位置的数据 END LOOP; CLOSE MyCur; -关闭游标关闭游标END; -结束程序体结束程序体

17、第第1010章章 游标、存储过程和触发器游标、存储过程和触发器游标属性游标属性(3)%ROWCOUNT属性属性 返回到当前位置为止游标返回到当前位置为止游标读取的记录行数。读取的记录行数。【例】只读取前【例】只读取前2行记录:行记录:/* 打开显示模式打开显示模式 */SET ServerOutput ON; DECLARE -开始声明部分开始声明部分 varName VARCHAR2(50); -声明变量声明变量,用来保存游标中的用户名用来保存游标中的用户名 varId NUMBER; -声明变量声明变量,用来保存游标中的用户编号用来保存游标中的用户编号 -定义游标定义游标, varType

18、为参数为参数, 指定用户类型编号指定用户类型编号 CURSOR MyCur(varType NUMBER) IS SELECT UserId, UserName FROM Users WHERE UserType = varType;第第1010章章 游标、存储过程和触发器游标、存储过程和触发器游标属性游标属性BEGIN -开始程序体开始程序体 IF MyCur%ISOPEN = FALSE Then OPEN MyCur(1); END IF; FETCH MyCur INTO varId, varName; -读取当前游标位置的数读取当前游标位置的数据据 WHILE MyCur%FOUND

19、 -如果当前游标有效,则执行循环如果当前游标有效,则执行循环 LOOP dbms_output.put_line(用户编号用户编号: | varId |, 用户名用户名: | varName); -显示读取的数据显示读取的数据 IF MyCur%ROWCOUNT = 2 THEN EXIT; END IF; FETCH MyCur INTO varId, varName; -读取当前游标位置的数读取当前游标位置的数据据 END LOOP; CLOSE MyCur; -关闭游标关闭游标END; -结束程序体结束程序体第第1010章章 游标、存储过程和触发器游标、存储过程和触发器第第1010章章

20、游标、存储过程和触发器游标、存储过程和触发器游标游标FOR循环循环 游标游标FOR循环是显式游标的一种快捷使用方式,循环是显式游标的一种快捷使用方式,它使用它使用FOR循环依次读取结果集中的行数据。循环依次读取结果集中的行数据。当当FOR循环开始时,游标被自动打开(不再需要循环开始时,游标被自动打开(不再需要OPEN语句);语句);每循环一次,系统自动读取游标当前行的数据每循环一次,系统自动读取游标当前行的数据(不需要使用(不需要使用FETCH语句);语句);当退出循环时,游标自动关闭(不需要使用当退出循环时,游标自动关闭(不需要使用CLOSE语句)。语句)。第第1010章章 游标、存储过程和

21、触发器游标、存储过程和触发器游标游标FOR循环循环游标游标FOR循环通常与循环通常与PL/SQL记录一起使用。记录一起使用。PL/SQL记录(记录(RECORD)是由一组数据构成的逻辑单元,并)是由一组数据构成的逻辑单元,并不保存在数据库中,与变量一样,保存在内存空间中。不保存在数据库中,与变量一样,保存在内存空间中。使用记录时,需要先定义记录的结构,然后声明记录变量。使用记录时,需要先定义记录的结构,然后声明记录变量。定义记录类型的基本语法如下:定义记录类型的基本语法如下: TYPE IS RECORD (字段声明字段声明 ,字段声明字段声明 );定义记录变量的方法与定义普通变量的方法相同,

22、语法如下:定义记录变量的方法与定义普通变量的方法相同,语法如下: 第第1010章章 游标、存储过程和触发器游标、存储过程和触发器游标游标FOR循环循环 【例】声明记录类型【例】声明记录类型User_Record_Type和定义记和定义记录变量录变量var_UserRecord:TYPE User_Record_Type IS RECORD ( UserId Users.UserId%Type, UserName Users.UserName%Type);var_UserRecord User_Record_Type;第第1010章章 游标、存储过程和触发器游标、存储过程和触发器游标游标FOR循

23、环循环 【例】【例】PL/SQL记录可以与游标结合使用:记录可以与游标结合使用:/* 打开显示模式打开显示模式 */SET ServerOutput ON; DECLARE -开始声明部分开始声明部分/* 声明记录类型声明记录类型 */TYPE User_Record_Type IS RECORD ( UserId Users.UserId%Type, UserName Users.UserName%Type);/* 定义记录变量定义记录变量 */var_UserRecord User_Record_Type; -定义游标定义游标, varType为参数为参数, 指定用户类型编号指定用户类型编

24、号 CURSOR MyCur(varType NUMBER) IS SELECT UserId, UserName FROM Users WHERE UserType = varType;第第1010章章 游标、存储过程和触发器游标、存储过程和触发器游标游标FOR循环循环 BEGIN -开始程序体开始程序体 IF MyCur%ISOPEN = FALSE Then OPEN MyCur(1); END IF; LOOP FETCH MyCur INTO var_UserRecord; -读取当前游标位置的读取当前游标位置的数据到记录变量数据到记录变量var_UserRecord EXIT WH

25、EN MyCur%NOTFOUND; -当游标指向结果集结尾时当游标指向结果集结尾时退出循环退出循环 /* 显示保存在记录变量显示保存在记录变量var_UserRecord中的数据中的数据 */ dbms_output.put_line(用户编号用户编号: | var_UserRecord.UserId |, 用户名用户名: | var_UserRecord.UserName); END LOOP; CLOSE MyCur; -关闭游标关闭游标END; -结束程序体结束程序体第第1010章章 游标、存储过程和触发器游标、存储过程和触发器第第1010章章 游标、存储过程和触发器游标、存储过程和触

26、发器游标游标FOR循环循环 典型游标典型游标FOR循环需要先对游标进行声明,然后才循环需要先对游标进行声明,然后才可以使用。典型游标可以使用。典型游标FOR循环的语法说明如下:循环的语法说明如下: FOR IN LOOP 语句语句1; 语句语句2; 语句语句n; END LOOP;第第1010章章 游标、存储过程和触发器游标、存储过程和触发器游标游标FOR循环循环 带子查询的典型游标带子查询的典型游标FOR循环的语法说明如下:循环的语法说明如下: FOR IN LOOP 语句语句1; 语句语句2; 语句语句n; END LOOP;第第1010章章 游标、存储过程和触发器游标、存储过程和触发器游

27、标游标FOR循环循环 【例】典型游标【例】典型游标FOR循环的例子:循环的例子:/* 打开显示模式打开显示模式 */SET ServerOutput ON; DECLARE CURSOR MyCur(varType NUMBER) IS SELECT UserId, UserName FROM Users WHERE UserType = varType;BEGIN -开始程序体开始程序体 FOR var_UserRecord IN MyCur(1) LOOP /* 显示保存在记录变量显示保存在记录变量var_UserRecord中的数据中的数据 */ dbms_output.put_line

28、(用户编号用户编号: | var_UserRecord.UserId |, 用户名用户名: | var_UserRecord.UserName); END LOOP;END; -结束程序体结束程序体第第1010章章 游标、存储过程和触发器游标、存储过程和触发器游标游标FOR循环循环 第第1010章章 游标、存储过程和触发器游标、存储过程和触发器游标游标FOR循环循环 【例】带子查询游标【例】带子查询游标FOR循环的例子:循环的例子:/* 打开显示模式打开显示模式 */SET ServerOutput ON; BEGIN -开始程序体开始程序体 FOR var_UserRecord IN (SE

29、LECT UserId,UserName FROM Users WHERE UserType=1) LOOP /* 显示保存在记录变量显示保存在记录变量var_UserRecord中的数据中的数据 */ dbms_output.put_line(用户编号用户编号: | var_UserRecord.UserId |, 用户名用户名: | var_UserRecord.UserName); END LOOP;END; -结束程序体结束程序体第第1010章章 游标、存储过程和触发器游标、存储过程和触发器10.2存储过程管理存储过程管理 过程过程 函数函数 程序包程序包 第第1010章章 游标、存储

30、过程和触发器游标、存储过程和触发器过程过程 CREATE PROCEDURE语句来创建过程:语句来创建过程:CREATE OR REPLACE PROCEDURE IS | AS BEGIN END ; 第第1010章章 游标、存储过程和触发器游标、存储过程和触发器过程过程【例】创建示例过程【例】创建示例过程ResetPwd,此过程的功能是,此过程的功能是将表将表Users中指定用户的密码重置为中指定用户的密码重置为111111:CREATE OR REPLACE PROCEDURE ResetPwd( VUserId IN NUMBER)ASBEGIN UPDATE Users SET Us

31、erPwd = 111111 WHERE UserId = VUserId;END;第第1010章章 游标、存储过程和触发器游标、存储过程和触发器过程过程 过程的调用过程的调用 可以使用可以使用EXECUTE命令调用过程。如命令调用过程。如 EXECUTE ResetPwd(1);-将编号为将编号为1的用户密码重置的用户密码重置 SELECT UserName,UserPwd FROM Users; 过程的删除过程的删除 可以使用可以使用DROP PROCEDURE命令删除过程。命令删除过程。【例】删除过程【例】删除过程ResetPwd。 DROP PROCEDURE ResetPwd第第10

32、10章章 游标、存储过程和触发器游标、存储过程和触发器过程过程 存储过程管理存储过程管理 第第1010章章 游标、存储过程和触发器游标、存储过程和触发器过程过程 添加存储过程添加存储过程 第第1010章章 游标、存储过程和触发器游标、存储过程和触发器过程过程 修改存储过程修改存储过程 第第1010章章 游标、存储过程和触发器游标、存储过程和触发器函数函数 CREATE FUNCTION语句来创建函数:语句来创建函数:CREATE OR REPLACE FUNCTION RETURN IS | AS BEGIN RETURN END ;第第1010章章 游标、存储过程和触发器游标、存储过程和触发

33、器函数函数 【例】下面介绍一个示例函数【例】下面介绍一个示例函数GetPwd,此函数的,此函数的功能是在表功能是在表Users中根据指定的用户名返回该中根据指定的用户名返回该用户的密码信息:用户的密码信息:CREATE FUNCTION GetPwd( name IN Users.UserName%Type )RETURN Users.UserPwd%TypeASoutpwd Users.UserPwd%Type;BEGIN SELECT UserPwd INTO outpwd FROM Users WHERE UserName=name; RETURN outpwd;END;第第1010章章

34、 游标、存储过程和触发器游标、存储过程和触发器函数函数 函数的调用函数的调用SET ServerOutput on;DECLARE varPwd Users.UserPwd%TYPE;BEGIN varPwd:=GetPwd(Admin); dbms_output.put_line(varPwd);End;第第1010章章 游标、存储过程和触发器游标、存储过程和触发器函数函数 函数的删除函数的删除 删除函数用删除函数用DROP语句语句 语法格式为:语法格式为: DROP FUNCTION 【例】删除函数【例】删除函数GetPwd; DROP FUNCTION GetPwd第第1010章章 游标

35、、存储过程和触发器游标、存储过程和触发器函数函数 函数管理函数管理 第第1010章章 游标、存储过程和触发器游标、存储过程和触发器函数函数 添加函数添加函数 第第1010章章 游标、存储过程和触发器游标、存储过程和触发器函数函数 修改函数修改函数 第第1010章章 游标、存储过程和触发器游标、存储过程和触发器程序包程序包 CREATE PACKAGE语句来创建包的说明部分:语句来创建包的说明部分:CREATE OR REPLACE PACKAGE IS | AS END ;第第1010章章 游标、存储过程和触发器游标、存储过程和触发器程序包程序包【例】下面介绍一个示例创建程序包【例】下面介绍一

36、个示例创建程序包MyPack,它,它包含前面包含前面2小节中的过程小节中的过程ResetPwd和函数和函数GetPwd:CREATE OR REPLACE PACKAGE MyPackISPROCEDURE ResetPwd( VUserId IN NUMBER);FUNCTION GetPwd ( name IN Users.UserName%Type )RETURN Users.UserPwd%Type;END MyPack;第第1010章章 游标、存储过程和触发器游标、存储过程和触发器程序包程序包 程序包管理程序包管理 第第1010章章 游标、存储过程和触发器游标、存储过程和触发器程序包

37、程序包 添加程序包添加程序包 第第1010章章 游标、存储过程和触发器游标、存储过程和触发器程序包程序包 CREATE PACKAGE BODY语句来创建包体部分:语句来创建包体部分:CREATE PACKAGE BODY IS | AS END ;第第1010章章 游标、存储过程和触发器游标、存储过程和触发器程序包程序包【例】下面创建程序包【例】下面创建程序包MyPack的包体体部分:的包体体部分:CREATE PACKAGE BODY MyPackISPROCEDURE ResetPwd( VUserId IN NUMBER)ASBEGIN UPDATE Users SET UserPwd

38、 = 111111 WHERE UserId = VUserId;END;FUNCTION GetPwd( name IN Users.UserName%Type )RETURN Users.UserPwd%TypeASoutpwd Users.UserPwd%Type;BEGIN SELECT UserPwd INTO outpwd FROM Users WHERE UserName=name; RETURN outpwd;END;END MyPack;第第1010章章 游标、存储过程和触发器游标、存储过程和触发器程序包程序包 程序包管理查看程序包管理查看MyPack程序包体程序包体 第第1

39、010章章 游标、存储过程和触发器游标、存储过程和触发器程序包程序包 添加程序包添加程序包 第第1010章章 游标、存储过程和触发器游标、存储过程和触发器程序包程序包 调用程序包中的过程调用程序包中的过程. 调用程序包中的函数:调用程序包中的函数:. 【例】调用【例】调用MyPack.GetPwd函数,返回指定用户的密码信函数,返回指定用户的密码信息:息:SET ServerOutput ON;DECLARE varPwd Users.UserPwd%Type;BEGIN varPwd:=MyPack.GetPwd(Admin); dbms_output.put_line(varPwd);EN

40、D;第第1010章章 游标、存储过程和触发器游标、存储过程和触发器程序包程序包程序包中过程的调用方法:程序包中过程的调用方法:【补充例】调用【补充例】调用MyPack. ResetPwd过程,修过程,修改指定用户的密码信息:改指定用户的密码信息:SET ServerOutput ON;DECLAREBEGINMyPack.ResetPwd(3); END;第第1010章章 游标、存储过程和触发器游标、存储过程和触发器程序包程序包 DROP PACKAGE BODY命令删除程序包体:命令删除程序包体:DROP PACKAGE BODY UserMan.MyPack; DROP PACKAGE命令

41、删除程序包的说明部分:命令删除程序包的说明部分:DROP PACKAGE UserMan.MyPack;第第1010章章 游标、存储过程和触发器游标、存储过程和触发器10.3触发器管理触发器管理 触发器的基本概念触发器的基本概念 创建及使用触发器创建及使用触发器 第第1010章章 游标、存储过程和触发器游标、存储过程和触发器触发器的基本概念触发器的基本概念 触发器触发器是一种特殊的存储过程,当指定表中的数据是一种特殊的存储过程,当指定表中的数据发生变化时自动运行。发生变化时自动运行。 触发器与普通存储过程的不同之处在于:触发器与普通存储过程的不同之处在于:触发器的触发器的执行是由事件触发的,而

42、普通存储过程是由命令调执行是由事件触发的,而普通存储过程是由命令调用的。用的。第第1010章章 游标、存储过程和触发器游标、存储过程和触发器触发器的基本概念触发器的基本概念按触发事件不同,可分为:按触发事件不同,可分为:1. INSERT。当指定的表发生插入(。当指定的表发生插入(INSERT)操)操作时执行触发器。作时执行触发器。2. UPDATE。当指定的表发生修改(。当指定的表发生修改(UPDATE)操作时执行触发器。操作时执行触发器。3. DELETE。当指定的表发生删除(。当指定的表发生删除(DELETE)操)操作时执行触发器。作时执行触发器。第第1010章章 游标、存储过程和触发器

43、游标、存储过程和触发器触发器的基本概念触发器的基本概念 按触发时间不同,可分为:按触发时间不同,可分为:1. BEFORE。在指定的事件发生之前执行触发器。在指定的事件发生之前执行触发器。2. AFTER。在指定的事件发生之后执行触发器。在指定的事件发生之后执行触发器。按触发级别不同,可分为:按触发级别不同,可分为:1. 行触发。对触发事件影响的每一行执行触发器。行触发。对触发事件影响的每一行执行触发器。2. 语句触发。对于触发事件只能触发一次,而且不能语句触发。对于触发事件只能触发一次,而且不能访问受触发器影响的每一行的值。访问受触发器影响的每一行的值。第第1010章章 游标、存储过程和触发

44、器游标、存储过程和触发器创建及使用触发器创建及使用触发器 CREATE TRIGGER语句来创建触发器:语句来创建触发器:CREATE OR REPLACE TRIGGER BEFORE | AFTER ON FOR EACH ROW WHEN 第第1010章章 游标、存储过程和触发器游标、存储过程和触发器创建及使用触发器创建及使用触发器【例】创建一个触发器【例】创建一个触发器MyTrigger,它的作用是当,它的作用是当表表USERMAN.UserType中中TypeId列的值发生变列的值发生变化时,自动更新表化时,自动更新表USERMAN.Users中的中的UserType列的值,从而保证

45、数据的完整性:列的值,从而保证数据的完整性:CREATE OR REPLACE TRIGGER MyTriggerAFTER UPDATE ON UserTypeFOR EACH ROWBEGIN UPDATE Users SET UserType = :new.TypeId WHERE UserType = :old.TypeId;END;第第1010章章 游标、存储过程和触发器游标、存储过程和触发器创建及使用触发器创建及使用触发器第第1010章章 游标、存储过程和触发器游标、存储过程和触发器创建及使用触发器创建及使用触发器【例】创建一个触发器【例】创建一个触发器MyTrigger,它的作用是当,它的作用是当表表 Courses中中Cno列的值发生变化时,自动更列的值发生变化时,自动更新

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论