第10章-存储过程课件.ppt
《第10章-存储过程课件.ppt》由会员分享,可在线阅读,更多相关《第10章-存储过程课件.ppt(50页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第10章存储过程章存储过程10.1.1 10.1.1 什么是存储过程什么是存储过程10.1 10.1 概概 述述 存储过程是在数据库服务器端执行的一组存储过程是在数据库服务器端执行的一组T-SQLT-SQL语句的语句的集合,经编译后存放在数据库服务器端。存储过程作为一集合,经编译后存放在数据库服务器端。存储过程作为一个单元进行处理并以一个名称来标识。个单元进行处理并以一个名称来标识。它能够向用户返回数据、向数据库表中写入或修改数它能够向用户返回数据、向数据库表中写入或修改数据,还可以执行系统函数和管理操作,用户在编程中只需据,还可以执行系统函数和管理操作,用户在编程中只需要给出存储过程的名称
2、和必需的参数,就可以方便地调用要给出存储过程的名称和必需的参数,就可以方便地调用它们。它们。10.1.2 10.1.2 存储过程的类型存储过程的类型l系统存储过程:由系统存储过程:由SQL ServerSQL Server提供,通常使用提供,通常使用“sp_sp_”为前缀,主要用于管理为前缀,主要用于管理SQL ServerSQL Server和显示有关数据库及和显示有关数据库及用户的信息。用户的信息。l用户自定义存储过程:用户编定的可以重复用的用户自定义存储过程:用户编定的可以重复用的T-SQLT-SQL语句功能模块,并且在数据库中有唯一的名称,可以附语句功能模块,并且在数据库中有唯一的名称
3、,可以附带参数,完全由用户自己定义、创建和维护。带参数,完全由用户自己定义、创建和维护。l临时存储过程:临时过程是用户自定义过程的一种形式。临时存储过程:临时过程是用户自定义过程的一种形式。临时存储过程与永久过程相似,只是临时存储过程存储临时存储过程与永久过程相似,只是临时存储过程存储于于tempdbtempdb中。中。临时存储过程有两种类型:本地过程和临时存储过程有两种类型:本地过程和全局过程。全局过程。l扩展存储过程:允许用户使用编程语言(例如扩展存储过程:允许用户使用编程语言(例如C C)创建)创建自己的外部例程。自己的外部例程。10.2创建存建存储过程程10.2.1.10.2.1.使用
4、使用SQL ServerSQL Server管理控制器创建存储过程管理控制器创建存储过程【例例10.110.1】使用使用SQL ServerSQL Server管理控制器创建存储过程管理控制器创建存储过程maxscoremaxscore,用于输出所有学生的最高分。,用于输出所有学生的最高分。操作步骤操作步骤启动启动SQL ServerSQL Server管理控制器。在管理控制器。在“对象资源管理器对象资源管理器”中中展开展开“LCB-PCLCB-PC”服务器节点。服务器节点。展开展开“数据库数据库|school|school|可编程性可编程性|存储过程存储过程”节点,单击鼠节点,单击鼠标右键,
5、在出现的快捷菜单中选择标右键,在出现的快捷菜单中选择“新建存储过程新建存储过程”命令,命令,如图如图10.110.1所示。所示。单击工具栏中的单击工具栏中的“!”按钮,将其保存在数据库中。此时按钮,将其保存在数据库中。此时选中选中“存储过程存储过程”节点,单击鼠标右键,在出现的快捷菜节点,单击鼠标右键,在出现的快捷菜单中选择单中选择“刷新刷新”命令,会看到命令,会看到“存储过程存储过程”的下方出现的下方出现了了maxscoremaxscore存储过程。存储过程。10.2.2 10.2.2 使用使用CREATE PROCEDURECREATE PROCEDURE语句创建存储过程语句创建存储过程使
6、用使用CREATE PROCEDURECREATE PROCEDURE语句的基本语法格式如下:语句的基本语法格式如下:CREATE PROCEDURE 存储过程名存储过程名;number parameter 数据类型数据类型=默认值默认值 OUT|OUTPUT READONLY ,n WITH RECOMPILE|ENCRYPTION FOR REPLICATION AS SQL语句语句 n 创建存储过程时应该注意下面几点:创建存储过程时应该注意下面几点:l存储过程的最大大小为存储过程的最大大小为128MB128MB。l只能在当前数据库中创建用户定义的存储过程。只能在当前数据库中创建用户定义的
7、存储过程。l在单个批处理中,在单个批处理中,CREATE PROCEDURECREATE PROCEDURE语句不能与其他语句不能与其他T-SQLT-SQL语句组合使用。语句组合使用。l存储过程可以嵌套使用,在一个存储过程中可以调用其他的存储过程可以嵌套使用,在一个存储过程中可以调用其他的存储过程。嵌套的最大深度不能超过存储过程。嵌套的最大深度不能超过3232层。层。l如果存储过程创建了临时表,则该临时表只能用于该存储过如果存储过程创建了临时表,则该临时表只能用于该存储过程,而且当存储过程执行完毕后,临时表自动被删除。程,而且当存储过程执行完毕后,临时表自动被删除。l创建存储过程时,在创建存储
8、过程时,在“SQLSQL语句语句”中不能包含中不能包含SET SET SHOWPLAN_TEXTSHOWPLAN_TEXT、SET SHOWMAN_ALLSET SHOWMAN_ALL、CREATE VIEWCREATE VIEW、CREATE CREATE DEFAULTDEFAULT、CREATE RULECREATE RULE、CREATE PROCEDURECREATE PROCEDURE和和CREATE CREATE TRIGGERTRIGGER(用于创建触发器,在下一章介绍)语句。(用于创建触发器,在下一章介绍)语句。lSQL ServerSQL Server允许创建的存储过程中引
9、用尚不存在的对象。允许创建的存储过程中引用尚不存在的对象。10.3 10.3 执行存储过程执行存储过程使用使用EXECUTEEXECUTE或或EXECEXEC关键字的语句执行存储过程。关键字的语句执行存储过程。EXECUTE return_status=存储过程名存储过程名 ;number|procedure_name_var parameter=值值|variable OUTPUT|DEFAULT ,n WITH RECOMPILE 【例例10.310.3】执行例执行例10.110.1中创建的存储过程中创建的存储过程maxscoremaxscore并查并查看输出的结果。看输出的结果。USE
10、schoolGOEXEC maxscoreGO求求求求解解解解程程程程序序序序 在调用存储过程时,有两种传递参数的方式。在调用存储过程时,有两种传递参数的方式。(1 1)在传递参数时,使传递的参数和定义时的参数顺序)在传递参数时,使传递的参数和定义时的参数顺序一致。其一般格式如下:一致。其一般格式如下:EXEC EXEC 存储过程名存储过程名 实参列表实参列表 (2 2)采用)采用“参数参数=值值”的形式,此时,各个参数的顺序的形式,此时,各个参数的顺序可以任意排列。其一般格式如下:可以任意排列。其一般格式如下:EXEC EXEC 存储过程名存储过程名 参数参数1=1=值值1,1,参数参数2=
11、2=值值2,2,采用第一种方式执行存储过程采用第一种方式执行存储过程maxnomaxno的程序如下:的程序如下:USE schoolUSE schoolGOGO EXEC maxno 103EXEC maxno 103GOGO采用第二种方式执行存储过程采用第二种方式执行存储过程maxnomaxno的程序如下:的程序如下:USE schoolUSE schoolGOGOEXEC maxno no=103EXEC maxno no=103GOGO10.4.2 10.4.2 在存储过程中使用默认参数在存储过程中使用默认参数 在设计存储过程时,可以为参数提供一个默认值,默认在设计存储过程时,可以为参数
12、提供一个默认值,默认值必须为常量或者值必须为常量或者NULLNULL。其一般格式如下:。其一般格式如下:CREATE PROCEDURE CREATE PROCEDURE 存储过程名存储过程名(参数参数1=1=默认值默认值1,1,参数参数2=2=默认值默认值2,)2,)AS SQLAS SQL语句语句在调用存储过程时,如果不指定对应的实参值,则自动在调用存储过程时,如果不指定对应的实参值,则自动用对应的默认值代替。用对应的默认值代替。当不指定实参调用当不指定实参调用maxno1maxno1存储过程时,其结果如图存储过程时,其结果如图10.510.5所示。所示。当指定实参为当指定实参为10510
13、5调用调用maxno1maxno1存储过程时,其结果如图存储过程时,其结果如图10.610.6所示。所示。结论:结论:从执行结果可以看到,从执行结果可以看到,当调用存储过程时,没有指当调用存储过程时,没有指定参数值时就自动使用相应定参数值时就自动使用相应的默认值。的默认值。10.4.3 10.4.3 在存储过程中使用返回参数在存储过程中使用返回参数 在创建存储过程时,可以定义返回参数。在执行存储过在创建存储过程时,可以定义返回参数。在执行存储过程时,可以将结果返回给返回参数。返回参数应用程时,可以将结果返回给返回参数。返回参数应用OUTPUTOUTPUT进进行说明。行说明。【例例10.710.
14、7】创建一个存储过程创建一个存储过程averageaverage,它返回两个参数,它返回两个参数st_namest_name和和st_avgst_avg,分别代表了姓名和平均分。并编写,分别代表了姓名和平均分。并编写T-T-SQLSQL语句执行该存储过程和查看输出的结果。语句执行该存储过程和查看输出的结果。USE schoolUSE schoolGOGOIF OBJECT_ID(average,P)IS NOT NULLIF OBJECT_ID(average,P)IS NOT NULL DROP PROCEDURE average DROP PROCEDURE average-如果存储过程如
15、果存储过程averageaverage存在存在,删除之删除之GOGOCREATE PROCEDURE averageCREATE PROCEDURE average(st_no int,st_no int,st_name char(8)OUTPUT,st_name char(8)OUTPUT,-返回参数返回参数st_avg float OUTPUTst_avg float OUTPUT-返回参数返回参数)AS)AS SELECT st_name=student.SELECT st_name=student.姓名姓名,st_avg=AVG(score.,st_avg=AVG(score.分数分数
16、)FROM student,score FROM student,score WHERE student.WHERE student.学号学号=score.=score.学号学号 GROUP BY student.GROUP BY student.学号学号,student.,student.姓名姓名 HAVING student.HAVING student.学号学号=st_no=st_noGOGO求求求求解解解解程程程程序序序序执行该存储过程,来查询学号为执行该存储过程,来查询学号为“105”105”的学生姓名和平均分:的学生姓名和平均分:DECLARE st_name char(10)DE
17、CLARE st_avg floatEXEC average 105,st_name OUTPUT,st_avg OUTPUTSELECT 姓名姓名=st_name,平均分平均分=st_avgGO10.4.4 10.4.4 存储过程的返回值存储过程的返回值 存储过程在执行后都会返回一个整型值(称为存储过程在执行后都会返回一个整型值(称为“返回代返回代码码”),指示存储过程的执行状态。),指示存储过程的执行状态。如果执行成功,返回如果执行成功,返回0 0;否则返回;否则返回-1-1-99-99之间的数值之间的数值(例如(例如-1-1表示找不到对象,表示找不到对象,-2-2表示数据类型错误,表示数
18、据类型错误,-5-5表示语表示语法错误等)。也可以使用法错误等)。也可以使用RETURNRETURN语句来指定一个返回值。语句来指定一个返回值。执行该存储过程:执行该存储过程:USE Test GODECLARE ret_int intEXEC ret_int=test_ret 1PRINT 返回值返回值PRINT-PRINT ret_intEXEC ret_int=test_ret 0PRINT ret_intEXEC ret_int=test_ret-1PRINT ret_int10.4.5 10.4.5 使用使用SQL ServerSQL Server管理控制器执行存储过程管理控制器执行
19、存储过程 【例例10.1010.10】以下程序建立有存储过程以下程序建立有存储过程studavgstudavg,使用,使用SQL ServerSQL Server管理控制器执行该存储过程。管理控制器执行该存储过程。USE schoolGOIF OBJECT_ID(studavg,P)IS NOT NULL DROP PROCEDURE studavg-如果存储过程如果存储过程studavg存在存在,删除之删除之GOCREATE PROC studavg(no int,avg float=0 OUTPUT)AS BEGIN IF NOT EXISTS(SELECT*FROM score WHER
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 10 存储 过程 课件
限制150内