网络数据库第十章存储过程与触发器.ppt
《网络数据库第十章存储过程与触发器.ppt》由会员分享,可在线阅读,更多相关《网络数据库第十章存储过程与触发器.ppt(100页珍藏版)》请在三一办公上搜索。
1、第10章 存储过程与触发器,本章内容,10.1 存储过程概述10.2 存储过程的创建与使用10.3 触发器概述10.4 触发器的创建与使用10.5 事务处理10.6 SQL Server的锁机制,10.1 存储过程概述,存储过程是SQL Server服务器上一组预编译的Transact-SQL语句,用于完成某项任务,它可以接受参数、返回状态值和参数值,并且可以嵌套调用。,10.1 存储过程概述,SQL Server存储过程的类型包括:系统存储过程用户定义存储过程临时存储过程扩展存储过程。,1.存储过程的类型,10.1 存储过程概述,(1)系统存储过程,是指由系统提供的存储过程,主要存储在mas
2、ter数据库中并以sp_为前缀,它从系统表中获取信息,从而为系统管理员管理SQL Server提供支持。通过系统存储过程,SQL Server中的许多管理性或信息性的活动(例如使用sp_depends、sp_helptexts可以了解数据数据库对象、数据库信息)都可以顺利有效地完成。尽管系统存储过程被放在master数据库中,仍可以在其他数据库中对其进行调用(调用时,不必在存储过程名前加上数据库名)。当创建一个新数据库时,一些系统存储过程会在新数据库中被自动创建。,10.1 存储过程概述,(2)用户定义存储过程,是由用户创建并能完成某一特定功能(例如查询用户所需数据信息)的存储过程。它处于用户
3、创建的数据库中,存储过程名前没有前缀sp_。,10.1 存储过程概述,(3)临时存储过程,临时存储过程与临时表类似,分为局部临时存储过程和全局临时存储过程,且可以分别向该过程名称前面添加“#”或“#”前缀表示。“#”表示本地临时存储过程,“#”表示全局临时存储过程。使用临时存储过程必须创建本地连接,当SQL Server关闭后,这些临时存储过程将自动被删除。由于SQL Server支持重新使用执行计划,所以连接到SQL Server 2000的应用程序应使用sp_executesql系统存储过程,而不使用临时存储过程。,10.1 存储过程概述,(4)扩展存储过程,扩展存储过程是SQL Serv
4、er可以动态装载和执行的动态链接库(DLL)。当扩展存储过程加载到SQL Server中,它的使用方法与系统存储过程一样。扩展存储过程只能添加到master数据库中,其前缀是xp_。,10.1 存储过程概述,2.存储过程的功能特点,SQL Server的存储过程可实现以下功能:(1)接收输入参数并以输出参数的形式为调用过程或批处理返回多个值。(2)包含执行数据库操作的编程语句,包括调用其他过程。(3)为调用过程或批处理返回一个状态值,以表示成功或失败(及失败原因)。,10.1 存储过程概述,存储过程具有以下优点,(1)模块化编程。(2)快速执行。(3)减少网络通信量。(4)提供安全机制。(5)
5、保证操作一致性。,10.2.1 创建存储过程10.2.2 执行存储过程10.2.3 修改存储过程10.2.4 删除存储过程10.2.5 存储过程参数与状态值,10.2 存储过程的创建与使用,10.2.1 创建存储过程,1.使用企业管理器创建存储过程(1)启动企业管理器,登录到要使用的服务器。(2)选择要创建存储过程的数据库,在左窗格中单击“存储过程”文件夹。,10.2 存储过程的创建与使用,(3)右击“存储过程”文件夹,在弹出菜单中选择“新建存储过程”选项,此时打开创建存储过程对话框。,10.2.1 创建存储过程,(4)在“文本”编辑框中输入存储过程正文。(5)单击“检查语法”按钮,检查语法是
6、否正确。(6)单击“确定”按钮,保存存储过程。(7)在图10-1的右窗格中,右击该存储过程,在弹出菜单中选择“所有任务”,选择“管理权限”,在“对象属性”对话框中设置权限(如设置PUBLIC用户有EXEC权限)。,10.2.1 创建存储过程,2.使用向导创建存储过程,(1)在企业管理器中选择当前服务器,然后执行“工具向导”菜单命令,弹出“选择向导”对话框。(2)在“选择向导”对话框中展开“数据库”项,双击“创建存储过程向导”项,弹出“创建存储过程”对话框。,10.2.1 创建存储过程,(3)单击“下一步”按钮,进入“选择数据库”对话框,10.2.1 创建存储过程,(4)单击“下一步”按钮,进入
7、“选择存储过程”对话框。在该对话框中,设置该存储过程中的表要执行的操作,可同时设置一个或多个操作(用于插入、删除和更新)。如果选择多个操作,每个操作都将创建一个存储过程。这里为customer表创建插入存储过程。,10.2.1 创建存储过程,(5)单击“下一步”按钮,进入“完成存储过程创建”对话框。在该对话框中显示将要创建的存储过程的名称及其操作,这里的存储过程名称是insert_customer_1。,10.2.1 创建存储过程,(6)在图10-7中选择一个存储过程,单击“编辑”按钮,进入“编辑存储过程属性”对话框。在此可以重新设置存储过程的名称和要操作的字段。,10.2.1 创建存储过程,
8、(7)如果要通过SQL语句对正在创建的存储过程进行修改,单击“编辑SQL”按钮,弹出“编辑存储过程SQL”对话框。(8)SQL语句编辑完成后,单击“分析”按钮,将对存储过程进行分析。分析成功后,单击“确定”按钮,返回图10-7“完成存储过程”对话框,再单击“完成”按钮,开始创建存储过程,并弹出创建成功对话框。,10.2.1 创建存储过程,3.使用CREATE PROCEDURE语句创建存储过程,使用CREATE PROCEDURE语句创建存储过程应该考虑以下几个方面:(1)在一个批处理中,CREATE PROCEDURE语句不能与其他SQL语句合并在一起。(2)数据库所有者具有默认的创建存储过
9、程的权限,它可把该权限传递给其他的用户。(3)存储过程作为数据库对象其命名必须符合标识符的命名规则。(4)只能在当前数据库中创建属于当前数据库的存储过程。,10.2.1 创建存储过程,创建存储过程语句的语法格式如下:,CREATE PROCEDURE procedure_name;number parameter data_type VARYING=default OUTPUT,.n WITH RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION FOR REPLICATION AS sql_statement,.n,10.2.1 创建存储过程,例10-1 创建存
10、储过程,从表goods和表goods_classification的联接中返回商品名、商品类别、单价。,10.2.1 创建存储过程,CREATE PROCEDURE goods_info ASSELECT goods_name,classification_name,unit_priceFROM goods g INNER JOIN goods_classification gcON g.classification_id=gc.classification_id存储过程创建后,存储过程的名称存放在sysobject表中,文本存放在syscomments表中。,10.2.2 执行存储过程,执行
11、存储过程的语法格式:EXECUTE return_status=procedure_name;number|procedure_name_var parameter=value|variable OUTPUT|DEFAULT,.n WITH RECOMPILE,10.2 存储过程的创建与使用,例如,执行例10-1的存储过程goods_info,在SQL查询分析器中输入命令:EXEC goods_info运行的结果:,10.2.2 执行存储过程,10.2 存储过程的创建与使用,10.2.3 修改存储过程,修改存储过程可以通过企业管理器和Transact SQL语句实现。1.使用企业管理器修改存储
12、过程(1)在企业管理器中展开服务器组,再展开服务器。(2)展开“数据库”文件夹,再展开要修改存储过程的数据库。(3)在要修改的存储过程上右击,并在弹出的快捷菜单中选择“属性”项,或者双击要修改的存储过程,弹出“存储过程属性”窗口。,10.2.3 修改存储过程,(4)在“文本”框中直接对其代码进行修改,修改完成后,先检查语法,正确后单击“确定”按钮。,10.2.3 修改存储过程,2.使用ALTER PROCEDURE语句修改存储过程,ALTER PROCEDURE的语法规则是:ALTER PROCEDURE procedure_name;number parameter data_typeVAR
13、YING=default OUTPUT,.n WITH RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTIONFOR REPLICATION AS sql_statement.n,10.2.3 修改存储过程,例10-2 使用ALTER PROCEDURE语句更改存储过程。,(1)创建存储过程employee_dep,以获取总经理办的男员工。CREATE PROCEDURE employee_dep AS SELECT employee_name,sex,address,department_nameFROM employee e INNER JOIN departm
14、ent d ON e.department_id=d.department_id WHERE sex=男 AND e.department_id=D001GO执行存储过程employee_dep,结果如图,10.2.3 修改存储过程,(2)查看employee_dep存储过程的文本信息,SELECT o.id,c.textFROM sysobjects o INNER JOIN syscomments c ON o.id=c.idWHERE o.type=P AND o.name=employee_depGO,10.2.3 修改存储过程,(3)使用ALTER PROCEDURE语句对emplo
15、yee_dep过程进行修改,使其能够显示出所有男员工,并使employee_dep过程以加密方式存储在表syscomments中,ALTER PROCEDURE employee_depWITH ENCRYPTION AS SELECT employee_name,sex,address,department_nameFROM employee e INNER JOIN department d ON e.department_id=d.department_id WHERE sex=男 GO,10.2.3 修改存储过程,执行修改后的存储过程employee_dep,结果如图:,10.2.3
16、修改存储过程,(4)从系统表sysobjects和syscomments提取修改后的存储过程employee_dep的文本信息可以运行步骤(2)中的代码,结果如图,这是由于在ALTER PROCEDURE语句中使用WITH ENCRYPTION关键字对存储过程employee_dep的文本进行了加密,其文本信息显示为乱码。,10.2 存储过程的创建与使用,10.2.4 删除存储过程,存储过程可以被快速删除和重建,因为它没有存储数据。1.使用企业管理器删除存储过程(1)在企业管理器中展开服务器组,再展开相应的服务器。(2)展开“数据库”文件夹,再展开要删除存储过程的数据库。,10.2.4 删除存
17、储过程,(3)单击“存储过程”项,在右窗格中右击要删除的存储过程,选择的同时按下Ctrl键可以同时选择多个存储过程,在弹击的快捷菜单中选择“删除”项,弹出“除去对象”对话框。(4)在“除去对象”对话框中单击“显示相关性”按钮,可以显示依附该存储过程的对象,在确定不影响其他对象后单击“全部除去”按钮,删除所有选择的存储过程。,10.2.4 删除存储过程,2.使用DROP PROCEDURE删除存储过程,DROP PROCEDURE的语法如下:DROP PROCEDURE procedure_name,.n 例如删除例10-2创建的存储过程employee_dep:DROP PROCEDURE e
18、mployee_depGO,10.2 存储过程的创建与使用,10.2.5 存储过程参数与状态值,存储过程和调用者之间通过参数交换数据,可以按输入的参数执行,也可由参数输出执行结果。调用者通过存储过程返回的状态值对存储过程进行管理。1.参数存储过程的参数在创建过程时声明。SQL Server支持两类参数:输入参数和输出参数。,10.2.5 存储过程参数与状态值,(1)输入参数,输入参数允许调用程序为存储过程传送数据值。要定义存储过程的输入参数,必须在CREATE PROCEDURE语句中声明一个或多个变量及类型。,10.2.5 存储过程参数与状态值,例10-3 创建带参数的存储过程,从表empl
19、oyee、sell_order、goods、goods_classification的连接中返回输入的员工名、该员工销售的商品名、商品类别、销售量等信息。,CREATE PROC sell_info employee_name varchar(20)AS SELECT employee_name,goods_name,classification_name,order_numFROM employee e INNER JOIN sell_order s ON e.employee_id=s.employee_id JOIN goods g ON g.goods_id=s.goods_id JO
20、IN goods_classification gc ON gc.classification_id=g.classification_idWHERE employee_name LIKE employee_name,10.2.5 存储过程参数与状态值,存储过程sell_info以employee_name变量作为输入参数,执行时,可以省略参数名,直接给参数值。在SQL查询分析器中输入命令:EXEC sell_info 东方牧运行结果如图。,参数值可以包含通配符“%”,例如,查找所有姓“钱”的员工的销售情况可以使用以下命令:EXEC sell_info 钱%,10.2.5 存储过程参数与状态值
21、,执行时,参数可以由位置标识,也可以由名字标识。,例如,定义一个具有3个参数的存储过程:CREATE PROC myproc val1 int,val2 int,val3 intAS.参数以位置传递:EXEC myproc 10,20,15参数以名字传递,每个值由对应的参数名引导:EXEC myproc val2=20,val1=10,val3=15按名字传递参数比按位置传递参数具有更大的灵活性。但是,按位置传递参数却具有更快的速度。,10.2.5 存储过程参数与状态值,(2)输出参数,输出参数允许存储过程将数据值或游标变量传回调用程序。OUTPUT关键字用以指出能返回到调用它的批处理或过程中
22、的参数。为了使用输出参数,在CREATE PROCEDURE和EXECUTE语句中都必须使用OUTPUT关键字。,10.2.5 存储过程参数与状态值,例10-4 创建存储过程price_goods,通过输入参数在goods表中查找商品,以输出参数获取商品单价。,CREATE PROC price_goods goods_name varchar(80)=NULL,price_goods real OUTPUTASSELECT price_goods=unit_priceFROM goodsWHERE goods_name=goods_name,10.2.5 存储过程参数与状态值,执行price
23、_goods存储过程的代码如下:DECLARE price realEXEC price_goods Canon LBP2900,price OUTPUTSELECT price运行结果是商品名为Canon LBP2900的商品单价:1380.0,EXECUTE语句还需要关键字OUTPUT以允许参数值返回给变量。,10.2.5 存储过程参数与状态值,(1)用RETURN语句定义返回值存储过程可以返回整型状态值,表示过程是否成功执行,或者过程失败的原因。如果存储过程没有显式设置返回代码的值,则SQL Server返回代码为 0,表示成功执行;若返回-1-99之间的整数,表示没有成功执行。也可以使
24、用RETURN语句,用大于0或小于-99的整数来定义自己的返回状态值,以表示不同的执行结果。,2.返回存储过程的状态,10.2.5 存储过程参数与状态值,例10-5 创建存储过程,输入商品类别,返回各种商品名称。在存储过程中,用值15表示用户没有提供参数;值-l01表示没有输入商品类别;值0表示过程运行没有出错。,CREATE PROC cl_goods cl_name varchar(40)=NULLASIF cl_name=NULL RETURN 15IF NOT EXISTS(SELECT*FROM goods_classification WHERE classification_na
25、me=cl_name)RETURN-101SELECT g.goods_name FROM goods_classification gc,goods gWHERE gc.classification_id=g.classification_id AND gc.classification_name=cl_nameRETURN 0,10.2.5 存储过程参数与状态值,在执行过程时,要正确接收返回的状态值,必须使用以下语句;EXECUTE status_var=procedure_name,(2)捕获返回状态值,10.2.5 存储过程参数与状态值,DECLARE return_status in
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 数据库 第十 存储 过程 触发器
链接地址:https://www.31ppt.com/p-6600036.html