28
7 7 第 第第第第第第第第 第 第第第第第第第第 第第第第第 第第第第第 第第第第第 第第第第第 , , 第第第第第 第第第第第 第第第第第第第第第第 第第第第第第第第第第 2012 2012 第第第第第第第 第第第第第第第 第第第第第第第第第第 第第第第第第第第第第 第第 第第第 第第 第第 第第第 第第 第第第 第第第 第第 第第第 第第 第第第 第第第 第第 第第第 第第 第第 第第第 第第 第第 第第第 第第

第 7 章 存储过程与触发器

Embed Size (px)

DESCRIPTION

高校计算机 , 电气与信息 管理与商务类规划教材. 2012 上海市精品课程 上海教育高地建设项目. 第 7 章 存储过程与触发器. 数据库原理应用与实践. 主编 贾铁军 甘泉 副主编 沈学东 常艳 连志刚 胡静 编著 李向臣 曾刚. 科学出版社. 目 录. 教学目标 ● 了解存储过程的特点、类型和作用 ● 理解和掌握 存储过程的执行方式 ● 了解 DML 触发器 的工作原理 ● 理解和掌握 DDL 触发器的特点和创建方式. 重点. 7.1 存储过程概述. 要点复习. 7.1.1 存储过程的概念 - PowerPoint PPT Presentation

Citation preview

Page 1: 第 7 章 存储过程与触发器

第第 77 章 存储过程与触发器章 存储过程与触发器 科学出版社科学出版社

高校计算机高校计算机 ,, 电气与信息电气与信息管理与商务类规划教材管理与商务类规划教材 20122012 上海市精品课程上海市精品课程上海教育高地建设项目上海教育高地建设项目

主编 贾铁军 甘泉主编 贾铁军 甘泉副主编 沈学东 常艳 连志刚 胡静副主编 沈学东 常艳 连志刚 胡静编著 李向臣 曾刚 编著 李向臣 曾刚

Page 2: 第 7 章 存储过程与触发器

目 录教学目标● 了解存储过程的特点、类型和作用● 理解和掌握存储过程的执行方式● 了解 DML 触发器的工作原理● 理解和掌握 DDL 触发器的特点和创建方式

重点重点

Page 3: 第 7 章 存储过程与触发器

7.1 存储过程概述 7.1.1 存储过程的概念 存储过程存储过程( Stored Procedure )是数据库系统中,一组完成特定功能的 SQL 语句集。经编译后存储在数据库中,用户通过指定存储过程名及给出参数(若此存储过程带有参数)进行调用执行。 SQL Server 提供了一种方法,可将一些固定的操作集中由 SQL Server 数据库服务器完成 , 以实现某个任务 , 这种方法就是存储过程。

要点复习要点复习

可调用可调用 ( 执行 ) 的的过程文件过程文件

Page 4: 第 7 章 存储过程与触发器

7.1 存储过程概述 7.1.1 存储过程的概念 存储过程是一组相关的 T-SQL 语句集合,提供了一种封装任务的方法,并具有强大的编程功能。 存储过程包括 4 个方面:( 1 )包含在数据库中执行操作的语句,包括调用 ( 执行 ) 其他存储过程。( 2 )接受输入参数。( 3 )状态值返回指示成功或失败。( 4 )以输出参数的形式,将多个值返回到发起调用的存储过程或客户端应用程序。

Page 5: 第 7 章 存储过程与触发器

7.1 存储过程概述 7.1.2 存储过程的特点和类型 1. 存储过程的特点:( 1 )在服务器注册后 , 可以提高 T-SQL 语句执行效率 .( 2 )存储过程具有安全性和所有权链接,可执行所有的权限管理。用户可以被授予执行存储过程的权限,而不必拥有直接对存储过程中引用对象的执行权限。( 3 )存储过程允许用户模块化设计程序,极大地提高了程序设计的效率。例如,存储过程创建之后,可以在程序中任意调用,提高程序的设计效率、提高了应用程序的可维护性。( 4 )存储过程可以大大减少网络通信流量,这是一条非常重要的使用存储过程的原因。

Page 6: 第 7 章 存储过程与触发器

7.1 存储过程概述 2 存储过程的类型在 SQL Server 系统中,提供 3 种基本存储过程类型 :( 1 )用户定义的存储过程( 2 )扩展存储过程( 3 )系统存储过程 除此之外,还有临时存储过程、远程存储过程等,各自起着不同的作用。

Page 7: 第 7 章 存储过程与触发器

 7.2.1 创建存储过程可以使用三种创建存储过程方法:( 1 )利用创建存储过程向导创建存储过程。( 2 )使用 SQL Server企业管理器创建存储过程。( 3 )使用 T-SQL 语句中的 CREATE PROCEDURE命令创建存储过程 ( 重点介绍 ) 。

7.2 存储过程的实现

Page 8: 第 7 章 存储过程与触发器

 7.2.1 创建存储过程 1. 创建存储过程 利用 T-SQL 语句 CREATE PROCEDURE命令创建存储过程 , 包含一些选项,其语法格式如下所示: CREATE PROCEDURE proc_name AS BEGIN sql_statement1 sql_statement2 END   2. 调用 ( 执行 ) 存储过程 EXECUTE Production.proc_name

7.2 存储过程的实现

Page 9: 第 7 章 存储过程与触发器

*7.2.2 创建参数化存储过程1. 使用输入参数的准则 若要定义接受参数的存储过程,应在 CREATE PROCEDURE 语句中声明参数。使用输入参数时,应考虑以下准则:( 1 )根据情况为参数提供默认值。如果定义了默认值,则用户无需为该参数指定值即可执行存储过程。( 2 )在存储过程的开头验证所有传入的参数值,以尽早查出缺少的值和无效值。

7.2 存储过程的实现

Page 10: 第 7 章 存储过程与触发器

 2. 使用输入参数的示例【案例 7-4】修改存储过程 LongLeadProducts,添加参数@MinimumLength, 并指定其为 int 数据类型和其默认值为 1 。

ALTER PROC Production.LongLeadProducts @MinimumLength int = 1 -- default value AS IF (@MinimumLength < 0) -- validate 验证 BEGIN RAISERROR('Invalid lead time.', 14, 1) RETURN END

7.2 存储过程的实现

Page 11: 第 7 章 存储过程与触发器

3. 调用参数化存储过程EXEC Production.LongLeadProducts @MinimumLength=4

4. 使用参数默认值( 1 )执行存储过程时,没有为参数指定任何值。( 2 ) DEFAULT 关键字指定为参数的值。5. 输出参数和返回值 通过使用输出参数和返回值,存储过程可将信息返回给进行调用的存储过程和客户端。

7.2 存储过程的实现

Page 12: 第 7 章 存储过程与触发器

7.2.3 查看存储过程 存 储 过 程 被 创 建 之 后 , 其 名字存 储 在 系 统表sysobjects 中 , 源 语 句 则 存 放 在 系 统 表syscomments 中。可使用企业管理器或系统存储过程查看查看用户创建的存储过程 . 1. 用企业管理器查看存储过程 2. 用系统存储过程查看存储过程 格式: sp_help[[@objname=]name]类似请见 P184.

7.2 存储过程的实现

Page 13: 第 7 章 存储过程与触发器

 7.2.4 修改存储过程 在 SQL Server 统中,可以使用 ALTER PROCEDURE 语句修改已经存在的存储过程。  【案例 7-3】修改存储过程,查询制造时间在一天以上的所有产品名称,产品号及制造时间,并将结果按制造时间的降序进行显示。 ALTER PROC Production.LongLeadProducts AS SELECT Name,ProductNumber,DaysToManufacture FROM Production.Product WHERE DaysToManufacture >= 1 ORDER BY DaysToManufacture DESC, Name GO

7.2 存储过程的实现

Page 14: 第 7 章 存储过程与触发器

  7.2.5 更名或删除存储过程1. 更名存储过程 修改存储过程的名称可以使用系统存储过程 sp_rename ,其语法形式如下: sp_rename   原存储过程名,新存储过程名2. 删除存储过程 若要从当前数据库中删除用户定义的存储过程,应使用DROP PROCEDURE 语句。其语法格式为: DROP PROCEDURE 存储过程名

7.2 存储过程的实现

Page 15: 第 7 章 存储过程与触发器

*7.3 触发器应用 1. 触发器的概念及类型 触发器是一种特殊类型的存储过程,包括了大量的

T-SQL 语句。但是触发器又与存储过程不同,例如存储过程可以由用户直接调用执行,但是触发器不能被直接调用执行,它只能自动执行。

在语言事件执行时自动运行的一种特殊类型的存储过程

Page 16: 第 7 章 存储过程与触发器

7.3 触发器应用 1. 触发器的概念及类型 按照触发事件的不同,可以把 SQL Server 系统提供的触发器分成两大类型,即 DML 触发器和 DDL 触发器。 在 SQL Server 中,可以创建 CLR 触发器,既可以

是 DML 触发器,也可以是 DDL 触发器。 由于 SQLServer 与 .NET Framework 公共语言运行库 (CLR) 相集成,可用任何 .NET Framework 语言创建 CLR 触发器。

Page 17: 第 7 章 存储过程与触发器

7.3 触发器应用 1. 触发器的概念及类型 当数据库中发生数据操纵语言 (data manipulation

language , DML)事件时将调用 DML 触发器。 DML事件包括在指定表或视图中修改数据的 INSERT 语句、 UPDATE 语句或 DELETE 语句。 按照触发器事件类型的不同,可以把 SQL Server 系统提供的 DML 触发器分成 3 种类型,即 INSERT 类型、 UPDATE 类型和 DELETE 类型。这也是 DML 触发器的基本类型。

Page 18: 第 7 章 存储过程与触发器

7.3 触发器应用 1. 触发器的概念及类型 任何触发器都可以包含影响另外一个表的

INSERT 、 UPDATE 或 DELETE 语句。当允许触发器嵌套时,一个触发器可以修改触发第二个触发器的表,第二个触发器又可以触发第三个触发器。在默认情况下,系统允许触发器嵌套。

Page 19: 第 7 章 存储过程与触发器

7.3 触发器应用 2. 触发器的用途 触发器是一种特殊的存储过程,在

INSERT , UPDATE 或 DELETE 语句修改指定表中的数据时执行。触发器可查询其他表并且可包含复杂的 T-SQL 语句。人们通常创建触发器以往不同表中的逻辑相关数据之间实施引用完整性或一致性。

Page 20: 第 7 章 存储过程与触发器

7.3 触发器应用 7.3.2 创建触发器可使用 CREATE TRIGGER 语句创建触发器,其语法如下: CREATE TRIGGER trigger_name ON {table | view}

{FOR |AFTER| INSTEAD OF|} {[INSTERT]|[UPDATE]|[DELETE]} WITH APPEND AS {sql_statement}

Page 21: 第 7 章 存储过程与触发器

7.3 触发器应用 7.3.2 创建触发器 触发器的类型,有两类触发器 DML 和 DDL ,其中, DML 触发器也有两类: ( 1 ) AFTER 触发器。该触发器在执 INSERT,

UPDATE, DELETE 语句的之后执行。 ( 2 ) INSTEAD OF 触发器,该触发器替代常规触发操作执行 , 还可以在基于一个或多个基表的视图上定义。

Page 22: 第 7 章 存储过程与触发器

7.3 触发器应用 7.3.3 INSERT 触发器的工作方式 当执行 INSERT 语句将要数据插入表或视图时,如果该表或视图配置了 INSERT 触发器,就会激发该

INSERT 触发器来执行特定的操作。 当 INSERT 触发器触发时,新行将插入触发器和

inserted表。 inserted表是一个逻辑表,保留已插入行的副本。 inserted表包含由 INSERT 语句引起的已记入日志的插入活动。

Page 23: 第 7 章 存储过程与触发器

7.3 触发器应用 7.3.4 DELETE 触发器的工作方式 DELETE 触发器是一种特殊的存储过程,它在每次

DELETE 语句从配置了该触发器的表或者视图中删除数据时执行。 当 DELETE 触发器激发时,被删除的行将放置在特殊

的 deleted表中。 Deleted表是一个逻辑表,它保留已删除行的副本。

Page 24: 第 7 章 存储过程与触发器

7.3 触发器应用 7.3.5 UPDATE 触发器的工作方式 UPDATE 触发器是在每次 UPDATE 语句配置了

UPDATE 触发器的表或视图中的数据进行更改时执行的触发器。UPDATE 触发器的工作过程可视为两步:( 1 )数据前映像的 DELETE步骤。( 2 )捕获数据后映像是 INSERT 语句。

当 UPDATE 语句在已定义了触发器的表上执行时,原始行(前映像)移入 deleted表,而更新行(后映像)插入 inserted表中。

Page 25: 第 7 章 存储过程与触发器

7.3 触发器应用 7.3.6 INSTEAD OF 触发器的工作方式 INSTEAD OF 触发器替代常规触发器操作执行。 INSTEAD OF 触发器还可以在基于一个或多个基表的视图上定义。

INSTEAD OF 触发器主要具有优点:( 1 )允许由多个基表组成的视图支持引用表中数据的插入、更新和删除操作。( 2 )允许编写逻辑语句以拒绝执行批处理的某些命令,同时不影响批处理其他部分的成功执行。( 3 )允许针对符合指定条件情况的指定备选数据库操作。

Page 26: 第 7 章 存储过程与触发器

7.3 触发器应用 现在可以来总结一下,触发器可用来维持数据完整性,它防止了对数据的不正确、未授权的、和不一致的改变。当触发器激发对 INSERT , DELETE ,或 UPDATE 语句的响应时,

两个特殊的表被创建。这些是插入和删除表:( 1 ) inserted表包含插入在触发器表中的所有记录的拷

贝 .( 2 ) deleted表包含了已从触发器表中被删除的所有记录。

Page 27: 第 7 章 存储过程与触发器

讨论思考讨论思考:( 1 )什么是存储过程?用途是什么? ( 2 )什么是触发器?用途是什么?( 3 )建立及查看存储过程的语句是什么?

3.3 SQL Server结构及数据库种类

Page 28: 第 7 章 存储过程与触发器

数据库原理应用与实践数据库原理应用与实践