8.存储过程与触发器.ppt
《8.存储过程与触发器.ppt》由会员分享,可在线阅读,更多相关《8.存储过程与触发器.ppt(55页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、系系统统第九章第九章 存储过程与触发器存储过程与触发器v前前台台后台数据库后台数据库包含用户的操作界面。例如:登陆界面、商品入库界面、卖出商品界面等第九章第九章 存储过程与触发器存储过程与触发器v前前台台后台数据库后台数据库执行执行select命令,并将结果返回命令,并将结果返回商品查询界面根据关键词写出select 语句第九章第九章 存储过程与触发器存储过程与触发器v前前台台后台数据库后台数据库自动执行已编写好的命令自动执行已编写好的命令(存储过程存储过程),将结果返回,将结果返回商品查询界面根据关键词写出调用语句第九章第九章 存储过程与触发器存储过程与触发器v存储过程综述存储过程综述v存储
2、过程的基本操作存储过程的基本操作v创建和执行带有参数的存储过程创建和执行带有参数的存储过程v存储过程重新编译存储过程重新编译v系统存储过程和扩展存储过程系统存储过程和扩展存储过程第九章第九章 存储过程与触发器存储过程与触发器v存储过程综述存储过程综述1、存储过程概念、存储过程概念存储过程是一种数据库对象,是为了实现某个特定任务,将一组存储过程是一种数据库对象,是为了实现某个特定任务,将一组预编译的预编译的SQL语句以一个存储单元的形式存储在服务器上,供用户调语句以一个存储单元的形式存储在服务器上,供用户调用。存储过程在第一次执行时进行编译,然后将编译好的代码保存在用。存储过程在第一次执行时进行
3、编译,然后将编译好的代码保存在高速缓存中以便以后调用,这样可以提高代码的执行效率。高速缓存中以便以后调用,这样可以提高代码的执行效率。存储过程同其他编程语言中的过程相似,有如下存储过程同其他编程语言中的过程相似,有如下特点特点:1)接受输入参数并以输出参数的形式将多个值返回至调用过程或)接受输入参数并以输出参数的形式将多个值返回至调用过程或批处理。批处理。2)包含执行数据库操作(包括调用其它过程)的编程语句。)包含执行数据库操作(包括调用其它过程)的编程语句。3)向调用过程或批处理返回状态值,以表明成功或失败(以及失)向调用过程或批处理返回状态值,以表明成功或失败(以及失败原因)。败原因)。第
4、九章第九章 存储过程与触发器存储过程与触发器v存储过程综述存储过程综述优点:优点:1、安全机制:只给用户访问存储过程的权限,而不授予用户访问表、安全机制:只给用户访问存储过程的权限,而不授予用户访问表和视图的权限。和视图的权限。2、改良了执行性能:在第一次执行后,会在、改良了执行性能:在第一次执行后,会在SQLserver的缓冲区中的缓冲区中创建查询树,以后执行无需编译。创建查询树,以后执行无需编译。3、减少网络流量:存储过程存在于服务器上,调用时,只需传递执、减少网络流量:存储过程存在于服务器上,调用时,只需传递执行存储过程的执行命令和返回结果。行存储过程的执行命令和返回结果。4、模块化的程
5、序设计:增强了代码的可重用性与共享性,提高了开、模块化的程序设计:增强了代码的可重用性与共享性,提高了开发效率。发效率。5、存储过程提供了处理复杂任务的能力、存储过程提供了处理复杂任务的能力第九章第九章 存储过程与触发器存储过程与触发器v存储过程综述存储过程综述2、存储过程类型、存储过程类型系统存储过程系统存储过程:系统存储过程存储在:系统存储过程存储在master数据库中,并以数据库中,并以sp_为前缀,主为前缀,主要用来从系统表中获取信息,为系统管理员管理要用来从系统表中获取信息,为系统管理员管理SQLServer提供帮助,为用提供帮助,为用户查看数据库对象提供方便。户查看数据库对象提供方
6、便。本地存储过程本地存储过程:本地存储过程是用户根据需要,在自己的普通数据库中创:本地存储过程是用户根据需要,在自己的普通数据库中创建的存储过程。建的存储过程。临时存储过程临时存储过程:临时存储过程通常分为局部临时存储过程和全局临时存储:临时存储过程通常分为局部临时存储过程和全局临时存储过程。创建局部临时存储过程时,要以过程。创建局部临时存储过程时,要以“#”作为过程名称的第一个字符。创作为过程名称的第一个字符。创建全局临时存储过程时,要以建全局临时存储过程时,要以“#”作为过程名称的前两个字符。作为过程名称的前两个字符。远程存储过程远程存储过程:远程存储过程是:远程存储过程是SQLServe
7、r2000的一个传统功能,是指非的一个传统功能,是指非本地服务器上的存储过程。本地服务器上的存储过程。扩展存储过程扩展存储过程:扩展存储过程以:扩展存储过程以xp_为前缀,它是关系数据库引擎的开放式为前缀,它是关系数据库引擎的开放式数据服务层的一部分,其可以使用户在动态链接库数据服务层的一部分,其可以使用户在动态链接库(DLL)文件所包含的函数中文件所包含的函数中实现逻辑,从而扩展了实现逻辑,从而扩展了Transact-SQL的功能,并且可以象调用的功能,并且可以象调用Transact-SQL过程那样从过程那样从Transact-SQL语句调用这些函数。语句调用这些函数。第九章第九章 存储过程
8、与触发器存储过程与触发器v存储过程的基本操作存储过程的基本操作-创建创建创建存储过程时,需要注意下列事项:创建存储过程时,需要注意下列事项:1、只能在当前数据库中创建存储过程。、只能在当前数据库中创建存储过程。2、数据库的所有者可以创建存储过程,也可以授权其他用户创建存、数据库的所有者可以创建存储过程,也可以授权其他用户创建存储过程。储过程。3、存储过程是数据库对象,其名称必须遵守标识符命名规则。、存储过程是数据库对象,其名称必须遵守标识符命名规则。4、不能将、不能将CREATEPROCEDURE语句与其它语句与其它SQL语句组合到单语句组合到单个批处理中。个批处理中。5、创建存储过程时,应指
9、定所有输入参数和向调用过程或批处理返、创建存储过程时,应指定所有输入参数和向调用过程或批处理返回的输出参数、执行数据库操作的编程语句和返回至调用过程或批处回的输出参数、执行数据库操作的编程语句和返回至调用过程或批处理以表明成功或失败的状态值。理以表明成功或失败的状态值。第九章第九章 存储过程与触发器存储过程与触发器v存储过程的基本操作存储过程的基本操作-创建创建使用使用SQL语句创建不带参数的存储过程语法格式如下:语句创建不带参数的存储过程语法格式如下:CREATEPROCEDUREprocedure_name WITHRECOMPILE|ENCRYPTIONASsql_statement.n
10、 procedure_name:新存储过程的名称。过程名必须符合标识符规则,且对于新存储过程的名称。过程名必须符合标识符规则,且对于数据库及其所有者必须唯一。数据库及其所有者必须唯一。RECOMPILE:SQL不会缓存该过程的计划,该过程将在运行时重新编译。不会缓存该过程的计划,该过程将在运行时重新编译。ENCRYPTION:SQLServer加密加密使用使用ENCRYPTION可防止将过程作为可防止将过程作为SQLServer复制的一部分发布。复制的一部分发布。第九章第九章 存储过程与触发器存储过程与触发器例、在例、在STUDENT数据库中,创建一个查询存储过程数据库中,创建一个查询存储过程
11、ST_PROC_BJ,该存储过程将返回计算机系的班级名称。其,该存储过程将返回计算机系的班级名称。其程序清单如下:程序清单如下:USESTUDENTGOCREATEPROCDBO.ST_PROC_BJASSELECT班级名称班级名称FROM班级班级,系部系部WHERE系部系部.系部代码系部代码=班级班级.系部代码系部代码and系部系部.系系部名称部名称=计算机计算机GO第九章第九章 存储过程与触发器存储过程与触发器v存储过程的基本操作存储过程的基本操作-执行执行执行存储过程执行存储过程对存储在服务器上的存储过程,可以使用对存储在服务器上的存储过程,可以使用EXECUTE命令或其名称执行它,其命
12、令或其名称执行它,其语法格式如下:语法格式如下:EXECUTEprocedure_namenumber如果存储过程是批处理中的第一条语句,如果存储过程是批处理中的第一条语句,EXECUTE命令可以省略,可以使用命令可以省略,可以使用存储过程的名字执行该存储过程。存储过程的名字执行该存储过程。例:在查询分析器中执行存储过程例:在查询分析器中执行存储过程ST_PROC_BJ,其代码清单如下:,其代码清单如下:USESTUDENTEXECUTEST_PROC_BJGO第九章第九章 存储过程与触发器存储过程与触发器v存储过程的基本操作存储过程的基本操作-创建创建1、使用、使用SQL语句创建带参数的存储
13、过程语法格式如下:语句创建带参数的存储过程语法格式如下:CREATEPROCEDUREprocedure_namenumberparameterdata_typeVARYING=defaultOUTPUT,.nWITHRECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTIONASsql_statement.n只有两个必需的参数必须传递给只有两个必需的参数必须传递给CREATEPROCEDURE语句:创建语句:创建存储过程所需的存储过程所需的procedure_name和和sql_statements。第九章第九章 存储过程与触发器存储过程与触发器v存储过程的基本操作存储
14、过程的基本操作-创建创建其中:其中:procedure_name:新建存储过程的名称,其名称必须符合标识符命名规则,:新建存储过程的名称,其名称必须符合标识符命名规则,且对于数据库及其所有者必须唯一。且对于数据库及其所有者必须唯一。number:该参数是可选的整数,用来对同名的过程分组,以便用一条:该参数是可选的整数,用来对同名的过程分组,以便用一条DROPPROCEDURE语句即可将同组的过程一起删除。例如,名为语句即可将同组的过程一起删除。例如,名为orders的应用程的应用程序使用的过程可以命名为序使用的过程可以命名为orderproc1、orderproc2等。等。DROPPROCED
15、UREorderproc语句将删除整个组。语句将删除整个组。parameter:存储过程中的输入和输出参数。:存储过程中的输入和输出参数。data_type:参数的数据类型。:参数的数据类型。Default:指参数的默认值,必须是常量或:指参数的默认值,必须是常量或NULL。如果定义了默认值,不必。如果定义了默认值,不必指定该参数的值也可执行过程。指定该参数的值也可执行过程。第九章第九章 存储过程与触发器存储过程与触发器v存储过程的基本操作存储过程的基本操作-创建创建其中:其中:OUTPUT:表明参数是返回参数。该选项的值可以返回给:表明参数是返回参数。该选项的值可以返回给EXECUTE。使用
16、。使用OUTPUT参数可将信息返回给调用过程。参数可将信息返回给调用过程。RECOMPILE:表明:表明SQLServer不保存存储过程的计划,该过程将在运行时不保存存储过程的计划,该过程将在运行时重新编译。重新编译。ENCRYPTION:表示:表示SQLServer加密加密syscomments表中包含表中包含CREATEPROCEDURE语句文本的条目。语句文本的条目。sql_statement:指存储过程中的任意数目和类型的:指存储过程中的任意数目和类型的Transact-SQL语句。语句。在存储过程中使用参数,可以扩展存储过程的功能。使用输入参数在存储过程中使用参数,可以扩展存储过程的
17、功能。使用输入参数,可以将外部信息传入到存储过程;使用输出参数,可以将存储过程,可以将外部信息传入到存储过程;使用输出参数,可以将存储过程内的信息传出到外部内的信息传出到外部。第九章第九章 存储过程与触发器存储过程与触发器v存储过程的基本操作存储过程的基本操作-创建创建2、创建步骤、创建步骤一般来说,创建一个存储过程应按照以下步骤进行:一般来说,创建一个存储过程应按照以下步骤进行:编写编写SQL语句。语句。测试测试SQL语句是否正确,并能实现功能要求。语句是否正确,并能实现功能要求。若得到的结果数据符合预期要求,则按照存储过若得到的结果数据符合预期要求,则按照存储过程的语法,创建该建存储过程。
18、程的语法,创建该建存储过程。执行该存储过程,验证其正确性。执行该存储过程,验证其正确性。第九章第九章 存储过程与触发器存储过程与触发器例:在例:在STUDENT数据库中,建立一个名为数据库中,建立一个名为XIBU_INFOR的的存储过程,它带有一个参数,用于接受系部代码,显示该系存储过程,它带有一个参数,用于接受系部代码,显示该系部名称和系主任信息。部名称和系主任信息。USESTUDENTGOCREATEPROCEDUREXIBU_INFOR系部代码系部代码CHAR(2)ASSELECT系部名称系部名称,系主任系主任FROM系部系部WHERE系部代码系部代码=系部代码系部代码GO第九章第九章
19、存储过程与触发器存储过程与触发器v存储过程的基本操作存储过程的基本操作-执行执行3、执行有参数的存储过程、执行有参数的存储过程对存储在服务器上的存储过程,可以使用对存储在服务器上的存储过程,可以使用EXECUTE命令或其名称执行它,其命令或其名称执行它,其语法格式如下:语法格式如下:EXECUTEreturn_status=procedure_namenumberparameter=value|variableOUTPUT|DEFAULT,.n其中:其中:如果存储过程是批处理中的第一条语句,如果存储过程是批处理中的第一条语句,EXECUTE命令可以省略,可以使命令可以省略,可以使用存储过程的名
20、字执行该存储过程。用存储过程的名字执行该存储过程。return_status:是一个可选的整型变量,用来保存存储过程的返回状态。:是一个可选的整型变量,用来保存存储过程的返回状态。parameter:存储过程的参数。:存储过程的参数。例如:执行存储过程:例如:执行存储过程:EXECXIBU_INFOR01第九章第九章 存储过程与触发器存储过程与触发器例:包含了复杂的查询语句的存储过程例:包含了复杂的查询语句的存储过程。Createprocedureabcasselectsno,sum(credit)total_creditinto#o=owheregrade=60groupbysnohavin
21、gsum(credit)4selecta.sno,name,total_creditfromstudentajoin#1bona.sno=b.sno第九章第九章 存储过程与触发器存储过程与触发器例:查询某系学生人数例:查询某系学生人数createprocedurenumberdeptvarchar(10),countintoutputasselectcount=count(*)fromstudentwheredept=deptreturncount执行:执行:declarexintexecnumber计算机计算机,xoutputprintx第九章第九章 存储过程与触发器存储过程与触发器例:查询
22、选修课程门数的学生基本情况例:查询选修课程门数的学生基本情况createprocedurexxmsxxmsintoutputasselect*fromstudentwheresnoin(selectsnofromscgroupbysnohavingcount(*)=xxms)执行:执行:execxxmc2第九章第九章 存储过程与触发器存储过程与触发器例:例:usepubsgocreateproceduretitle_sumtitlevarchar(40)=%,summoneyoutputasselecttitlename=titlefromtitleswheretitleliketitlese
23、lectsum=sum(price)fromtitleswheretitleliketitlego第九章第九章 存储过程与触发器存储过程与触发器执行:执行:declaretotalcostmoneyexecutetitle_sumthe%,totalcostoutputiftotalcost=20beginselectthetotalcostofthesetitleis$+rtrim(cast(totalcostasvarchar(20)end注意:注意:必须在必须在createprocedure和和execute语句中都指定语句中都指定output关键字。如果关键字。如果output关键字在
24、存储过程执行过程中被忽略了,关键字在存储过程执行过程中被忽略了,存储过程仍然执行,但是他将会产生一个错误状态。存储过程仍然执行,但是他将会产生一个错误状态。例:自动编号例:自动编号createprocedureinsert_student1namechar(8),sexchar(2),ageint,deptvarchar(10)asdeclaresnochar(5)selectsno=max(sno)fromstudent1ifsno=setsno=00001elsebeginSETsno=CAST(CAST(snoASINT)+1ASVARCHAR(5)SETsno=REPLICATE(0,
25、5-LEN(sno)+snoendinsertintostudent1values(sno,name,sex,age,dept)Go执行:执行:execinsert_student1cd,女女,20,经管经管第九章第九章 存储过程与触发器存储过程与触发器v存储过程的基本操作存储过程的基本操作-创建创建使用企业管理器使用企业管理器例:在例:在STUDENT数据库中,创建一个名称为数据库中,创建一个名称为ST_CHAXUN_01的存储过程,该的存储过程,该存储过程返回计算机系学生的姓名、性别和年龄信息。其操作步骤如下:存储过程返回计算机系学生的姓名、性别和年龄信息。其操作步骤如下:1)打开企业管理
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 存储 过程 触发器
限制150内