数据库系统原理及应用-存储过程.ppt
《数据库系统原理及应用-存储过程.ppt》由会员分享,可在线阅读,更多相关《数据库系统原理及应用-存储过程.ppt(63页珍藏版)》请在三一办公上搜索。
1、数据库系统原理及应用,SQLServer2000编程-存储过程,2,存储过程,第一步,第二步,第三步,存储过程的基本知识,创建用户存储过程,存储过程的参数,3,1 存储过程的基本知识,1.概念存储过程(Stored Procedure)是存储在服务器上的 Transact-SQL 语句的命名集合是封装重复性任务的方法支持用户声明变量、条件执行以及其他强有力的编程特性2.功能 存储过程与其他编程语言中的过程类似,它可以包含执行数据库操作(包括调用其他过程)的编程语句接受输入参数向调用过程或批处理返回状态值,以表明成功或失败(以及失败原因)以输出参数的形式将多个值返回至调用过程或批处理,4,1 存
2、储过程的基本知识,3.优点使用存储过程而不使用存储在客户端计算机本地的 T-SQL 程序的优点包括:与其他应用程序共享应用逻辑,确保一致的数据访问和修改。存储过程封装了商务逻辑。若规则或策略有变化,则只需要修改服务器上的存储过程,所有的客户端就可以直接使用能够实现较快的执行速度预编译的 Transact-SQL 语句,可以根据条件决定执行哪一部分能够减少网络流量客户端用一条语句调用存储过程,就可以完成可能需要大量语句才能完成的任务,这样减少了客户端和服务器之间的请求/回答包提供了安全性机制。屏蔽数据库模式的详细资料。用户不需要访问底层的数据库和数据库内的对象。用户可以被赋予执行存储过程的权限,
3、而不必在存储过程引用的所有对象上都有权限,5,1存储过程的基本知识,4 分类SQL Server 支持五种类型的存储过程系统存储过程(sp_):存储在 master 数据库内,以“sp_”前缀标识本地存储过程:本地存储过程在单独的用户数据库内创建临时存储过程:临时存储过程可能是局部的,名称以“#”开头;也可能是全局的,名称以“#”开头远程存储过程:远程存储过程是 SQL Server 早期版本的特性,分布式查询支持这项功能扩展存储过程(xp_):扩展存储过程以动态链接库(DLL)的形式实现,在 SQL Server 环境外执行,6,存储过程的初始处理,存储过程的处理包括创建,以及初次执行时将执
4、行计划放入过程缓存过程缓存是一个包含所有当前正在执行的Transact-SQL 语句的执行计划的内存池,其大小动态变化过程缓存在内存池内。内存池是 SQL Server 内存的主要单元,它包含了 SQL Server 中大部分使用内存的数据结构,7,存储过程的初始处理,存储过程的创建创建存储过程时,先分析该过程中的语句以检查语法的准确性。然后 SQL Server 将存储过程的名字存入当前数据库的 sysobjects 系统表中,存储过程的文本存入当前数据库的 syscomments 系统表中延迟名称解析:存储过程引用的对象不需要在创建该存储过程时就存在,而只需在执行该存储过程时存在存储过程的
5、执行(初次或重新编译时)存储过程初次执行或者重新编译后,查询处理器读入存储过程的处理过程称为解析数据库的某些变化会使得执行计划低效或失效,SQL Server 检测这些变化并自动重新编译执行计划,8,存储过程的初始处理,优化如果过程执行顺利通过解析阶段,则查询优化器将分析该存储过程中的 Transact-SQL 语句,并创建一个执行计划,描述执行存储过程的最快方法编译编译指的是分析存储过程,创建执行计划并将之放入过程缓存的过程过程缓存包含了最有价值的存储过程执行计划。增加执行计划价值的因素包括:重新编译需要的时间(高的编译代价)和频繁被使用,执行计划所依据的信息包括:表中的数据量;表中是否存在
6、索引及索引的属性以及数据在索引列中的分布;WHERE 子句条件所用的比较运算符和比较值;是否存在联接以及 UNION、GROUP BY 和 ORDER BY 关键字。,9,存储过程的初始处理,项存入 sysobjects和 syscomments 表,编译过的执行计划放入过程缓存,编译,优化,创建,执行(初次或重新编译),解析,10,存储过程的后续处理,若符合下列条件,则 SQL Server 使用在内存中的计划来执行随后的查询当前的环境和计划编译时的环境相同。服务器、数据库和连接的设置决定了环境存储过程引用的对象不需要名称解析。若被不同用户拥有的对象具有相同的名字,则需要名称解析SQL Se
7、rver 的执行计划有两个主要部分查询计划:执行计划的主体是一个重入的只读数据结构,可由任意数量的用户使用,这称为查询计划。查询计划中不存储用户环境执行环境:每个正在执行查询的用户都有一个包含其执行专用数据(如参数值)的数据结构,称为执行环境,11,存储过程的后续处理,在缓存中,对于每个存储过程和环境的组合最多只有一个编译过的计划。对于一个存储过程的多个不同环境,可以有多个计划形成不同环境并影响编译选择的因素并行和串行编译计划隐含的对象拥有不同的 SET 选项一个执行计划产生后,驻留在过程缓存中。仅当需要空间时,SQL Server 将老的、没用的计划移出缓存,12,存储过程的后续处理,13,
8、3 创建存储过程,既可创建一个存储过程供永久使用,也可创建一个存储过程在一个会话中临时使用(局部临时过程),或在所有会话中临时使用(全局临时过程)。语法格式为:Create Procedure 存储过程名 参数名 数据类型Varying=默认值 Output,n WITH Recompile|Encryption|Recompile,Encryption AS SQL语句 n,14,说明:,存储过程名称局部临时过程,前面加编号符(#);全局临时过程,前面加两个编号符(#);不能超过128个字符。整数用来对同名过程进行分组。以便用一个Drop Procedure语句即可将同组的过程一起删去。参数
9、名指定过程中的参数。在该语句中可以声明一个或多个参数。用户必须在执行过程时提供每个声明参数的值。使用符号作为第一个字符来指定参数名称。数据类型所有数据类型都可以用作存储过程的参数。Varying指定作为输出参数支持的结果集(由存储过程动态构造,内容可变化)。仅适用游标参数。Recompile该过程将在运行时重新编译。Encryption 加密存储过程的定义SQL语句 n 过程中包含的任意数目和类型的T-SQL语句,但有一些限制。,15,创建存储过程,创建存储过程时,需要确定存储过程的三个组成部分:存储过程名称,包括所有的输入参数以及传给调用者的输出参数。被执行的针对数据库的操作语句以及调用其他
10、存储过程的语句。返回给调用者的状态值,以指明调用是成功还是失败。,16,3 创建存储过程,创建存储过程只能在当前数据库内创建存储过程,除了临时存储过程。临时存储过程总是创建在 tempdb 数据库中存储过程可以引用表、视图、用户定义函数、其他存储过程以及临时表若存储过程创建了局部临时表,则当存储过程执行结束后临时表消失,USE NorthwindGOCREATE PROC dbo.OverdueOrdersAS SELECT*FROM dbo.Orders WHERE RequiredDate GETDATE()AND ShippedDate IS NullGO,17,创建存储过程,在单个批处
11、理中,CREATE PROCEDURE 语句不能与其他 Transact-SQL 语句组合使用CREATE PROCEDURE 定义可以包括任何数目和类型的Transact-SQL语句,但不包括下列对象创建语句:CREATE DEFAULT、CREATE PROCEDURE、CREATE RULE、CREATE TRIGGER 和 CREATE VIEW执行 CREATE PROCEDURE 语句的用户必须是 sysadmin、db_owner 或 db_ddladmin角色的成员,或必须拥有 CREATE PROCEDURE 权限依赖于可用内存,存储过程的最大大小为128 MB,18,创建存
12、储过程,嵌套存储过程:一个存储过程调用另一个存储过程可以嵌套32层。若试图超过32层嵌套,则整个存储过程调用链失败当前的嵌套层数存储在系统函数 nestlevel 中若一个存储过程调用了第二个存储过程,那么第二个存储过程可以访问第一个存储过程创建的所有对象,包括临时表嵌套的存储过程可以递归调用。例如,存储过程X调用了存储过程Y,当存储过程Y运行的时候它可以调用存储过程X,19,通过系统存储过程查看存储过程,可供使用的系统存储过程及其语法形式如下:sp_help:用于显示存储过程的参数及其数据类型sp_help objname=name参数name为要查看的存储过程的名称。sp_helptext
13、:用于显示存储过程的源代码 sp_helptext objname=name参数name为要查看的存储过程的名称。sp_depends:用于显示和存储过程相关的数据库对象sp_depends objname=object参数object为要查看依赖关系的存储过程的名称。sp_stored_procedures:用于返回当前数据库中的存储过程列表,20,执行存储过程,可单独执行存储过程或作为 INSERT 语句的一部分执行存储过程必须在存储过程上拥有 EXECUTE 权限单独执行存储过程语法:EXECUTE返回状态=存储过程名;编号|存储过程名称变量参数=值|变量OUTPUT|DEFAULT,.
14、n WITH RECOMPILE在 INSERT 语句内执行存储过程语法:INSERT INTO 表名 EXECUTE 将本地或远程存储过程返回的结果集插入本地表中在 INSERT 语句内执行的存储过程必须返回关系结果集,21,修改和删除存储过程,修改存储过程用 ALTER PROCEDURE 中的定义取代现有存储过程原先的定义,但保留权限分配,USE NorthwindGOALTER PROC dbo.OverdueOrdersASSELECT CONVERT(char(8),RequiredDate,1)RequiredDate,CONVERT(char(8),OrderDate,1)Or
15、derDate,OrderID,CustomerID,EmployeeID FROM OrdersWHERE RequiredDate GETDATE()AND ShippedDate IS NullORDER BY RequiredDateGO,22,修改和删除存储过程,修改存储过程的注意事项若想修改带选项创建的存储过程,例如 WITH ENCRYPTION 选项,则必须在 ALTER PROCEDURE 语句中包括那些选项,以保留选项的功能ALTER PROCEDURE 语句只更改单个过程,不影响嵌套的存储过程ALTER PROCEDURE 权限默认授予 sysadmin 固定服务器角色成
16、员、db_owner 和 db_ddladmin 固定数据库角色成员和过程的所有者且不可转让,23,修改和删除存储过程,删除存储过程语法:DROP PROCEDURE 存储过程名,.n用 DROP PROCEDURE 语句从当前数据库中移除用户定义存储过程删除存储过程的注意事项在删除存储过程之前,执行系统存储过程 sp_depends 检查是否有对象依赖于此存储过程,24,在存储过程中使用参数,使用输入参数使用输入参数执行存储过程使用输出参数返回值显式地重新编译存储过程,25,使用输入参数,输入参数允许传递信息到存储过程内在 CREATE PROCEDURE 中指定 参数名 数据类型=默认值
17、指定参数的依据和指导原则所有的输入参数值都应该在存储过程开始的时候进行检查,以尽早捕获缺失值和非法值的情况应该为参数提供合适的默认值。若定义了默认值,用户可以在未指定参数值的基础上执行存储过程一个存储过程最多可以有1 024个参数存储过程内局部变量的数目没有限制,只和可用内存有关参数对存储过程而言是局部的。在不同存储过程中可以使用相同名字的参数,26,使用输入参数执行存储过程,通过参数名传递值在 EXECUTE 语句中以“参数名=值”的格式指定参数称为通过参数名传递当通过参数名传递值时,可以以任何顺序指定参数值,并且可以省略允许空值或具有默认值的参数若在存储过程中定义了参数的默认值,则在下列情
18、况使用:当调用存储过程的时候,参数未指定值或者参数的值指定为 DEFAULT 关键字通过位置传递参数只传递值(而没有对被传值参数的引用)称为通过位置传递参数值必须以参数在 CREATE PROCEDURE 语句中的定义顺序列出可以忽略有默认值的参数,但不能中断次序,27,创建一个带输入参数的存储过程,查询某一学生选课的详细信息,参数为学生名,create procedure p1 pname char(20)asselect student.sno,sname,sdept,o,cname,gradefrom student left join sc on student.sno=sc.sno
19、left join course on o=owhere sname=pnamego,调用:exec p1 李勇 exec p1 panme=李勇,28,创建一个带输入参数的存储过程,查询某一年龄范围内的学生信息,create procedure p2 bage int=18,eage int=20asSelect*from studentwhere sage between bage and eagego,调用:exec p2 exec p2 18exec p2 18,20exec p2 bage=18,eage=20,29,使用输出参数返回值,输出参数:以 OUTPUT 关键字指定的变量存
20、储过程通过输出参数向调用它的存储过程或客户端返回信息通过输出参数,存储过程的运行结果可以得到保留,即使存储过程运行结束输出参数的特性调用语句必须包含一个变量名,以接受返回值。不能传递常数可以在随后的 Transact-SQL 语句中使用返回变量输出参数可以是任何类型,除了 text 或 image输出参数可以是游标占位符,30,创建一个带输出参数的存储过程,计算某一个工程所使用的零件总数,输入工程号,输出数量,create procedure p3 pjno char(8),pnum int outputas Select pnum=sum(qty)from spjwhere jno=pjno
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 系统 原理 应用 存储 过程
链接地址:https://www.31ppt.com/p-6578604.html