SQL数据库之触发器.ppt
《SQL数据库之触发器.ppt》由会员分享,可在线阅读,更多相关《SQL数据库之触发器.ppt(66页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第8章章存储过程与触发器存储过程与触发器8.1存储过程的创建与使用存储过程的创建与使用8.2存储过程的查看、编辑和删除存储过程的查看、编辑和删除8.3触发器的创建与使用触发器的创建与使用8.4触发器的查看、编辑、重命名和删除触发器的查看、编辑、重命名和删除8.5实训要求与习题实训要求与习题第第8章章存储过程与触发器存储过程与触发器学习目的与要求学习目的与要求存存储储过过程程与与触触发发器器是是数数据据库库的的又又一一重重要要组组成成部部分分。存存储储过过程程可可以以把把对对数数据据库库的的复复杂杂操操作作封封装装为为独独立立的的程程序序模模块块,相相当当于于其其他他编编程程语语言言的的函函数
2、数、过过程程、方方法法,具具有有“编编写写一一次次处处处处调调用用”的的特特点点,便便于于程程序序的的维维护护和和减减少少网网络络通通讯讯量量。而而触触发发器器则则是是自自动动调调用用执执行行的的程程序序模模块块,可可以以实实现现规规则则、默默认认值值等等约约束束对对象象不不能能完完成成的的复复杂杂约约束束功功能能,可可以以检检查查数数据据输输入入与与修修改改的的正正确确性性,保保证证数数据据库库的的数数据据完完整整性性。通通过过本本章章学学习习,读读者者应应学学会会如如何何创创建建、查查看看、编编辑辑、删删除除存存储储过过程程和和触触发发器器,掌掌握握存存储储过过程程和和触触发发器器在在数数
3、据据库中的应用。库中的应用。8.1存储过程的创建与使用存储过程的创建与使用8.1.1、存储过程的概念、存储过程的概念1、存储过程、存储过程存存储储过过程程(storedprocedure)是是由由一一系系列列对对数数据据库库进进行行复复杂杂操操作作的的SQL语语句句、流流程程控控制制语语句句或或函函数数组组成成的的,并并且且将将代代码码事事先先编编译译好好之之后后、象象规规则则、视视图图那那样样作作为为一一个个独独立立的的数数据据库对象进行存储管理。库对象进行存储管理。存存储储过过程程可可作作为为一一个个单单元元被被用用户户直直接接调调用用。相相当当于于其其他他编编程语言的函数、过程、方法。程
4、语言的函数、过程、方法。2、存储过程的特点、存储过程的特点存存储储过过程程具具有有参参数数传传递递、判判断断、声声明明变变量量、返返回回信信息息并并扩扩充标准充标准SQL语言的功能,其特点是:语言的功能,其特点是:l l存存储储过过程程可可以以接接收收参参数数,并并可可以以返返回回多多个个参参数数值值,也也可可以以返回存储过程的执行状态值以反映存储过程的执行情况。返回存储过程的执行状态值以反映存储过程的执行情况。l l存储过程可以包含存储过程(嵌套),可以在数据库查询、存储过程可以包含存储过程(嵌套),可以在数据库查询、修改语句中调用存储过程,也可在存储过程中调用存储过程。修改语句中调用存储过
5、程,也可在存储过程中调用存储过程。8.1.1、存储过程的概念、存储过程的概念3、使用存储过程的优点、使用存储过程的优点l l执执行行速速度度快快:存存储储过过程程在在创创建建时时已已经经通通过过语语法法检检查查和和编编译译,调调用用时时则则直直接接执执行行,程程序序的的运运行行效效率率高高,其其执执行行速速度度要要比比标标准准SQLSQL语语句句快快得得多多。含含有有大大量量SQLSQL语语句句的的批批处处理理需需要要重重复复多多次次执执行行时时,定定义义为为存存储储过程可大大提高运行效率。过程可大大提高运行效率。l l有有利利于于模模块块化化程程序序设设计计:存存储储过过程程创创建建后后,即
6、即可可以以无无数数次次随随时时任任意繁荣调用。可根据不同的功能模式设计不同的存储过程以供调用。意繁荣调用。可根据不同的功能模式设计不同的存储过程以供调用。l l便便于于程程序序的的维维护护管管理理:当当用用户户对对数数据据库库使使用用的的功功能能改改变变时时,只只需需对相应的存储过程进行修改而不用修改应用程序。对相应的存储过程进行修改而不用修改应用程序。l l减减少少网网络络通通信信量量:存存储储过过程程可可包包含含大大量量对对数数据据库库进进行行复复杂杂操操作作的的SQLSQL语语句句,它它的的存存储储执执行行都都在在SQL SQL ServerServer服服务务器器(数数据据库库)端端,
7、网网络络用用户户使使用用时时只只需需发发送送一一个个调调用用语语句句就就可可以以实实现现,大大大大减减少少了了网网络络上上SQLSQL语句的传输。语句的传输。l l保保证证系系统统的的安安全全性性:可可以以在在存存储储过过程程中中设设置置用用户户对对数数据据的的访访问问权权限限,只只允允许许用用户户调调用用存存储储过过程程而而不不允允许许直直接接对对数数据据进进行行访访问问,充充分分发挥安全机制的作用。发挥安全机制的作用。8.1.1、存储过程的概念、存储过程的概念4、存储过程的缺点、存储过程的缺点l l不不能能实实现现复复杂杂的的逻逻辑辑操操作作:这这是是因因为为SQLSQL语语言言本本身身就
8、就不不支支持持复复杂杂的的程程序序设设计计结结构构,所所以以各各种种程程序序设设计计语语言言都都有自己对数据库进行操作处理的功能。有自己对数据库进行操作处理的功能。l l用用存存储储过过程程实实现现数数据据库库的的全全部部功功能能比比较较困困难难:不不同同用用户户的的需需求求不不同同,当当涉涉及及特特殊殊管管理理要要求求时时,很很难难全全面面满满足足要要求求,若若将将所所有有需需求求都都定定义义为为存存储储过过程程,其其数数量量将将相相当当可观,记忆和掌握这些存储过程是很困难。可观,记忆和掌握这些存储过程是很困难。存存储储过过程程分分为为系系统统存存储储过过程程和和用用户户自自定定义义存存储储
9、过过程程。系系统统存存储储过过程程可可直直接接使使用用,如如定定义义和和绑绑定定规规则则对对象象、默默认值对象等。用户自定义存储过程必须先定义后使用。认值对象等。用户自定义存储过程必须先定义后使用。8.1.28.1.2、用、用CREATE PROCCREATE PROC创建存储过程创建存储过程 创建存储过程应遵守的规则:创建存储过程应遵守的规则:l l名称标识符的长度最大为名称标识符的长度最大为128128个字符,且必须惟一。个字符,且必须惟一。l l每个存储过程最多可以使用每个存储过程最多可以使用1,0241,024个参数。个参数。l l存储过程的最大容量有一定的限制。存储过程的最大容量有一
10、定的限制。l l存储过程支持多达存储过程支持多达3232层嵌套。层嵌套。l l在对存储过程命名时最好和系统存储过程名区分。在对存储过程命名时最好和系统存储过程名区分。CREATE CREATE PROCPROCEDURE EDURE 存储过程名存储过程名 ;整数整数 形参变量形参变量 数据类型数据类型 varying=varying=默认值默认值 output,noutput,n WITH recompile WITH recompile|encryptionencryption|recompile,encryptionrecompile,encryption FOR replication
11、FOR replication AS AS SQL SQL 语句系列语句系列8.1.28.1.2、用、用CREATE PROCCREATE PROC创建存储过程创建存储过程说明:说明:l l该该语语句句可可以以创创建建永永久久存存储储过过程程,也也可可以以创创建建一一个个在在一一个个会会话话中中临临时时使使用用的的局局部部存存储储过过程程(名名称称前前加加一一个个#),还还可可以以创创建建一一个个在在所所有会话中临时使用的全局存储过程(名称前加两个有会话中临时使用的全局存储过程(名称前加两个#)。)。l l整整数数:可可作作为为同同名名过过程程分分组组的的后后缀缀序序号号(如如OP1OP1,O
12、P2OP2可可定定义义属属于于一一组组),同同组组的的过过程程将将来来可可以以用用一一条条DROP DROP PROCEDUREPROCEDURE删删除除命命令令全全部删除掉。部删除掉。l l 形形参参变变量量:指指定定接接收收调调用用参参数数或或返返回回值值的的变变量量,默默认认状状态态下下只只表表示示单单一一数数值值,不不能能代代表表表表名名、列列名名或或其其他他对对象象名名,形形参参变变量量的的作作用用域域为为该该存存储储过过程程;所所有有数数据据类类型型(nextnext、imageimage)都都可可以以作作为为过程的参数类型。过程的参数类型。n nVaryingVarying:仅仅
13、适适用用于于游游标标参参数数,指指定定形形参参变变量量可可作作为为支支持结果集的返回参数。持结果集的返回参数。n n默默认认值值:调调用用过过程程语语句句时时不不提提供供参参数数时时,形形参参变变量量则则取取该该默默认值。默认值只能是常量或认值。默认值只能是常量或NULLNULL。n nOutputOutput:指指定定形形参参变变量量是是返返回回给给调调用用语语句句的的参参数数,可可以以是所有数据类型,也可以是游标占位符。是所有数据类型,也可以是游标占位符。8.1.28.1.2、用、用CREATE PROCCREATE PROC创建存储过程创建存储过程l lRECOMPILERECOMPIL
14、E:执执行行完完存存储储过过程程后后不不保保留留存存储储过过程程的的备备份份,每次执行时都需要对存储过程重新编译。每次执行时都需要对存储过程重新编译。l l ENCRYPTIONENCRYPTION:存存储储过过程程作作为为数数据据库库对对象象在在系系统统的的syscommentssyscomments表表中中留留下下完完整整的的代代码码信信息息,并并对对访访问问这这些些数数据的入口进行加密。据的入口进行加密。注注意意:在在数数据据库库内内创创建建的的每每个个对对象象(约约束束、默默认认值值、日日志志、规规则则、存存储储过过程程等等)都都会会作作为为该该库库系系统统表表SysobjectsSy
15、sobjects中的一条记录占一行,该表的结构如表中的一条记录占一行,该表的结构如表8-18-1。表表8-1 8-1 SysobjectsSysobjects系统表的结构系统表的结构 列名列名数据类型数据类型存储内容说明存储内容说明namenamesysnamesysname对象名对象名ididintint对象标识号对象标识号xtypextype或或typetypechar(2)char(2)对象类型。其中的主要类型:对象类型。其中的主要类型:C=CHECK C=CHECK 约束约束 P=P=存储过程存储过程D=D=默认值或默认值或 DEFAULT DEFAULT 约束约束 TR=TR=触发器
16、触发器F=FOREIGN KEY F=FOREIGN KEY 约束约束 V=V=视图视图K=PRIMARY KEY K=PRIMARY KEY 或或 UNIQUE UNIQUE 约束约束 R=R=规则规则FN=FN=标量函数(自定义函数)标量函数(自定义函数)U=U=用户表用户表L=L=日志日志 S=S=系统表系统表crdatecrdatedatetimedatetime对象的创建日期。对象的创建日期。8.1.28.1.2、用、用CREATE PROCCREATE PROC创建存储过程创建存储过程【例例8-18-1】在在diannaoxsdiannaoxs数数据据库库中中建建立立一一个个名名为
17、为“计计算算机机_ _propro”的的存存储储过过程程,用用于于在在“进进货货表表20062006”“”“供供货货商商表表”“”“商商品品一一览览表表”中中查查询询“计算机计算机”产品的供货商及进货信息。产品的供货商及进货信息。先先判判断断sysobjectssysobjects系系统统表表中中是是否否存存在在名名为为“计计算算机机_ _propro”的的存存储储过过程,如果存在则删除原有的存储过程,然后再创建。程,如果存在则删除原有的存储过程,然后再创建。USEUSE diannaoxs diannaoxs IF exists(SELECT name FROMIF exists(SELEC
18、T name FROM sysobjects sysobjects WHERE name=WHERE name=计算机计算机_ _pro AND type=p)pro AND type=p)DROP procedure DROP procedure 计算机计算机_ _propro GO GO CREATE procedure CREATE procedure 计算机计算机_ _pro -pro -创建存储过程创建存储过程 AS AS SELECT SELECT 进货日期进货日期,供货商供货商,j.j.货号货号,货名货名,数量数量,进价进价 FROM FROM 进货表进货表2006 2006 A
19、S j,AS j,供货商表供货商表 AS g,AS g,商品一览表商品一览表 s s WHERE j.WHERE j.供货商供货商ID=g.ID=g.供货商供货商ID AND j.ID AND j.货号货号=s.s.货号货号 AND s.AND s.货名货名=计算机计算机 GOGO EXECUTE EXECUTE 计算机计算机_ _pro pro -调用执行存储过程调用执行存储过程 其其中中“进进价价”可可使使用用【实实例例练练习习7-77-7】创创建建的的自自定定义义函函数数“货货币币格格式式()()”【实例练习【实例练习8-1】建建立立一一个个名名为为“商商品品_ _pro1pro1”的的
20、存存储储过过程程,带带有有一一个个参参数数接接收收指指定定的的商商品品名名称称,在在“进进货货表表20062006”“”“供供货货商商表表”“”“商商品品一一览览表表”中中查查询询该该产品的供货商及进货信息。产品的供货商及进货信息。USEUSE diannaoxs diannaoxs IF exists(SELECT name FROMIF exists(SELECT name FROM sysobjects sysobjects WHERE name=WHERE name=商品商品_ _pro1 AND type=p)pro1 AND type=p)DROP procedure DROP p
21、rocedure 商品商品_ _pro1pro1 GO GO CREATE procedure CREATE procedure 商品商品_ _pro1 pro1 商品名商品名 nvarcharnvarchar(8)(8)AS AS SELECT SELECT 进货日期进货日期,供货商供货商,j.j.货号货号,货名货名,数量数量,进价进价 FROM FROM 进货表进货表2006 2006 j join j join 供货商表供货商表 g g ON j.ON j.供货商供货商ID=g.ID=g.供货商供货商ID join ID join 商品一览表商品一览表 s s ON j.ON j.货号货
22、号=s.s.货号货号 WHERE s.WHERE s.货名货名=商品名商品名 GOGO EXECUTE EXECUTE 商品商品_ _pro1 pro1 计算机计算机-运行结果与图运行结果与图8-18-1相同相同再输入代码:再输入代码:EXEC EXEC 商品商品_ _pro1 pro1 显示器显示器-结果如图结果如图8-2 8-2 8.1.38.1.3、用、用EXECUTEEXECUTE执行存储过程执行存储过程 语法格式:语法格式:EXECEXECUTEUTE整型变量整型变量=存储过程名存储过程名;标识号标识号 形参变量形参变量=值值|变量变量 outputoutput|default,n
23、default,n WITH recompile WITH recompile 简单格式:简单格式:EXECEXECUTE UTE 整型变量整型变量=存储过程名存储过程名 值值|变量变量 outputoutput|default ,n default ,n 说明:说明:l l 整整型型变变量量:用用于于接接收收存存储储过过程程的的返返回回状状态态值值,必必须须是是在此之前已经定义的,若不需要返回状态则省略。在此之前已经定义的,若不需要返回状态则省略。l l标标识识号号:指指定定同同名名存存储储过过程程分分组组的的后后缀缀序序号号,未未分分组组则省略。则省略。8.1.38.1.3、用、用EXEC
24、UTEEXECUTE执行存储过程执行存储过程 l l 形形参参变变量量:指指定定创创建建存存储储过过程程时时定定义义的的 形形参参变变量量,如如果果使使用用该该项项参参数数则则此此处处的的顺顺序序与与创创建建时时的的顺顺序序可可以以不不一一致致。省省略略“形形参参变变量量”则则此此处处提提供供的的参参数数个个数数、用途、顺序必须与定义时一致。用途、顺序必须与定义时一致。n n 变量用于存放参数值或者接收存储过程的返回值。变量用于存放参数值或者接收存储过程的返回值。n nOutputOutput:与与定定义义时时一一致致,指指定定该该项项为为存存储储过过程程的的返返回值。回值。n ndefaul
25、tdefault:根根据据存存储储过过程程的的定定义义,为为参参数数提提供供默默认认值。值。l lWITH RECOMPILEWITH RECOMPILE:强制编译新计划,建议尽量不用。强制编译新计划,建议尽量不用。一般常用的简单格式:一般常用的简单格式:EXEC EXEC 存存储储过过程程名名 值值|变变量量 outputoutput|default default ,n,n【实例练习【实例练习8-2】创创建建一一个个既既有有参参数数,又又有有返返回回状状态态值值的的存存储储过过程程“商商品品_ _pro2pro2”,在在“销销售售表表20062006”“”“进进货货表表20062006”“
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL 数据库 触发器
限制150内