存储过程、触发器.ppt
《存储过程、触发器.ppt》由会员分享,可在线阅读,更多相关《存储过程、触发器.ppt(30页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 第6章 存储过程、触发器6.1存储过程存储过程6.2触发器触发器 存储过程的类型(1)系统存储过程系统存储过程系统存储过程是由系统提供的存储过程,可以作为命令执行各种操作。系系统存储过程是由系统提供的存储过程,可以作为命令执行各种操作。系统存储过程定义在系统数据库统存储过程定义在系统数据库master中,其前缀是中,其前缀是sp_,例如常用的显示系统对,例如常用的显示系统对象信息的象信息的sp_help存储过程,它们为检索系统表的信息提供了方便快捷的方法。存储过程,它们为检索系统表的信息提供了方便快捷的方法。系统存储过程允许系统管理员执行修改系统表的数据库管理任务,可以在系统存储过程允许系统
2、管理员执行修改系统表的数据库管理任务,可以在任何一个数据库中执行。常用的系统存储过程,请见附录。任何一个数据库中执行。常用的系统存储过程,请见附录。(2)本地存储过程本地存储过程本地存储过程是指在用户数据库中创建的存储过程,这种存储过程完成特本地存储过程是指在用户数据库中创建的存储过程,这种存储过程完成特定数据库操作任务,其名称不能以定数据库操作任务,其名称不能以sp_为前缀。为前缀。(3)临时存储过程临时存储过程临时存储过程属于本地存储过程。如果本地存储过程的名称前面有一个临时存储过程属于本地存储过程。如果本地存储过程的名称前面有一个“#”,该存储过程就称为局部临时存储过程,这种存储过程只能
3、在一个用户会,该存储过程就称为局部临时存储过程,这种存储过程只能在一个用户会话中使用。话中使用。如果本地存储过程的名称前有两个如果本地存储过程的名称前有两个“#”,该过程就是全局临时存储过程,该过程就是全局临时存储过程,这种存储过程可以在所有用户会话中使用。这种存储过程可以在所有用户会话中使用。(4)远程存储过程远程存储过程远程存储过程指从远程服务器上调用的存储过程。远程存储过程指从远程服务器上调用的存储过程。(5)扩展存储过程扩展存储过程在在SQLServer2000环境之外执行的动态链接库称为扩展存储过程,其前缀环境之外执行的动态链接库称为扩展存储过程,其前缀是是sp_。使用时需要先加载到
4、。使用时需要先加载到SQLServer2000系统中,并且按照使用存储过程的系统中,并且按照使用存储过程的方法执行。方法执行。用户存储过程的创建与执行用户存储过程只能定义在当前数据库中,可以使用用户存储过程只能定义在当前数据库中,可以使用SQL命令语句或命令语句或SQLServer的企业管理器创建存储过程。缺省情况下,用户创建的存储过程归数据库的企业管理器创建存储过程。缺省情况下,用户创建的存储过程归数据库所有者拥有,数据库的所有者可以把许可授权给其他用户。所有者拥有,数据库的所有者可以把许可授权给其他用户。1创建存储过程创建存储过程语法格式语法格式:CREATEPROCEDUREproced
5、ure_name;number/*定义过程名定义过程名*/parameterdata_type/*定义参数的类定义参数的类型型*/VARYING=defaultOUTPUT/*定义参数的属性定义参数的属性*/,.n1WITHRECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION/*定义存储过程的处理方定义存储过程的处理方式式*/FORREPLICATIONASsql_statement.n2/*执行的操作执行的操作*/说明:说明:参数参数procedure_name用于指定存储过程名,必须符合标识符规则,且对于数用于指定存储过程名,必须符合标识符规则,且对于数据库及
6、其所有者必须唯一;创建局部临时过程,可以在据库及其所有者必须唯一;创建局部临时过程,可以在procedure_name前面加前面加一个一个“#”;创建全局临时过程,可以在;创建全局临时过程,可以在procedure_name前加前加“#”。参数参数number为可选的整数,用于区分同名的存储过程,以便用一条为可选的整数,用于区分同名的存储过程,以便用一条DROPPROCEDURE语句删除一组存储过程;语句删除一组存储过程;用户存储过程的创建与执行FORREPLICATION用于说明不能在订阅服务器上执行为复制创用于说明不能在订阅服务器上执行为复制创建的存储过程,该选项不能和建的存储过程,该选项
7、不能和WITHRECOMPILE一起使用。参数一起使用。参数sql_statement代表过程体包含的代表过程体包含的T-SQL语句,参数语句,参数n2说明一个存储过程说明一个存储过程可以包含多条可以包含多条T-SQL语句。语句。对于存储过程要注意下列几点:对于存储过程要注意下列几点:(1)用户定义的存储过程只能在当前数据库中创建(临时过程除外,用户定义的存储过程只能在当前数据库中创建(临时过程除外,临时过程总是在临时过程总是在tempdb中创建)。中创建)。(2)成功执行成功执行CREATEPROCEDURE语句后,过程名称存储在语句后,过程名称存储在sysobjects系统表中,而系统表中
8、,而CREATEPROCEDURE语句的文本存储在语句的文本存储在syscomments中。中。(3)自动执行存储过程自动执行存储过程QLServer启动时可以自动执行一个或多个存储过程。这些存储过启动时可以自动执行一个或多个存储过程。这些存储过程必须由系统管理员在程必须由系统管理员在master数据库中创建,并在数据库中创建,并在sysadmin固定服务固定服务器角色下作为后台过程执行。这些过程不能有任何输入参数。器角色下作为后台过程执行。这些过程不能有任何输入参数。(4)sql_statement的限制的限制除了除了SETSHOWPLAN_TEXT和和SETSHOWPLAN_ALL外,其外
9、,其它它SET语句均可在存储过程内使用。语句均可在存储过程内使用。用户存储过程的创建与执行如下语句必须使用对象所有者名对数据库对象进行限定:如下语句必须使用对象所有者名对数据库对象进行限定:CREATETABLE、ALTERTABLE、DROPTABLE、TRUNCATETABLE、CREATEINDEX、DROPINDEX、UPDATESTATISTICS及及DBCC语句。语句。权限。权限。CREATEPROCEDURE的权限默认授予的权限默认授予sysadmin固定服务器固定服务器角色成员、角色成员、db_owner和和db_ddladmin固定数据库角色成员。固定数据库角色成员。sysa
10、dmin固定服务器角色成员和固定服务器角色成员和db_owner固定数据固定数据库角色成员可以将库角色成员可以将CREATEPROCEDURE权限转让给其他用户。权限转让给其他用户。注意:存储过程的定义不能跨越批处理。注意:存储过程的定义不能跨越批处理。2存储过程的执行存储过程的执行通过通过EXEC命令可以执行一个已定义的存储过程。命令可以执行一个已定义的存储过程。语法格式:语法格式:EXECUTEreturn_status=procedure_name;number|procedure_name_varparameter=value|variableOUTPUT|DEFAULT,.nWITH
11、RECOMPILE用户存储过程的创建与执行说明:说明:参数参数return_status为可选的整型变量,保存存储过程的返回状为可选的整型变量,保存存储过程的返回状态,态,EXECUTE语句使用该变量前,必须对其定义。参数语句使用该变量前,必须对其定义。参数procedure_name和和number用于调用已定义的一组存储过程中的某一用于调用已定义的一组存储过程中的某一个,个,procedure_name代表了存储过程的组名,代表了存储过程的组名,number用于指定组中的用于指定组中的存储过程。定义存储过程组的目的是以便用一条存储过程。定义存储过程组的目的是以便用一条DROPPROCEDU
12、RE语句删除一组存储过程,对过程分组后,不能删除组中的单个过程。语句删除一组存储过程,对过程分组后,不能删除组中的单个过程。参数参数procedure_name_var代表存储过程名。代表存储过程名。parameter为为CREATEPROCEDURE语句中定义的参数名;语句中定义的参数名;value为存储过程的实参;为存储过程的实参;variable为变量,用于保存为变量,用于保存OUTPUT参数返回的值。参数返回的值。DEFAULT关键关键字表示不提供实参,而是使用对应的默认值。字表示不提供实参,而是使用对应的默认值。n:表示实参可有多个。:表示实参可有多个。关键字关键字WITHRECOM
13、PILE指定强制编译。指定强制编译。存储过程的执行要注意下列几点:存储过程的执行要注意下列几点:(1)如果存储过程名的前三个字符为如果存储过程名的前三个字符为sp_,SQLServer会在会在Master数据库中寻找该过程。如果没能找到合法的过程名,数据库中寻找该过程。如果没能找到合法的过程名,SQLServer会寻找所有者名称为会寻找所有者名称为dbo的过程。的过程。(2)参数可以通过参数可以通过value或或parameter_name=value提供。提供。(3)执行存储过程时,若语句是批处理中的第一个语句,则不一定执行存储过程时,若语句是批处理中的第一个语句,则不一定要指定要指定EXE
14、CUTE关键字。关键字。用户存储过程的创建与执行3存储过程的几种情况存储过程的几种情况(1)不使用任何参数的存储过程不使用任何参数的存储过程【例【例6.1】从】从XSCJ数据库的三个表中查询,返回学生学号、姓名、数据库的三个表中查询,返回学生学号、姓名、课程名、成绩、课程名、成绩、学分。该存储过程不使用任何参数。学分。该存储过程不使用任何参数。/*创建存储过程创建存储过程*/CREATEPROCEDUREstudent_infoASSELECTa.学号学号,姓名姓名,课程名课程名,成绩成绩,t.学分学分FROMXSaINNERJOINXS_KCbONa.学号学号=b.学号学号INNERJOIN
15、KCtONb.课程号课程号=t.课程号课程号student_info存储过程可以通过以下方法执行:存储过程可以通过以下方法执行:EXECUTEstudent_info或者或者EXECstudent_info如果该过程是批处理中的第一条语句,则可使用:如果该过程是批处理中的第一条语句,则可使用:student_info用户存储过程的创建与执行(2)使用带参数的存储过程使用带参数的存储过程【例【例6.2】从】从XSCJ数据库的三个表中查询某人指定课程的成绩和学数据库的三个表中查询某人指定课程的成绩和学分。该存储过程接受与传递参数精确匹配的值。分。该存储过程接受与传递参数精确匹配的值。CREATEP
16、ROCEDUREstudent_info1namechar(8),cnamechar(16)ASSELECTa.学号学号,姓名姓名,课程名课程名,成绩成绩,学分学分FROMXSaINNERJOINXS_KCbONa.学号学号=b.学号学号INNERJOINKCtONb.课程号课程号=t.课程号课程号WHEREa.姓名姓名=nameandt.课程名课程名=cnamestudent_info1存储过程有多种执行方式,下面列出了一部分:存储过程有多种执行方式,下面列出了一部分:EXECUTEstudent_info1王林王林,计算机基础计算机基础或者或者EXECUTEstudent_info1nam
17、e=王林王林,cname=计算机基础计算机基础或者或者EXECUTEstudent_info1cname=计算机基础计算机基础,name=王林王林或者或者EXECstudent_info1王林王林,计算机基础计算机基础或者或者EXECau_infocname=计算机基础计算机基础,name=王林王林用户存储过程的创建与执行(3)使用带有通配符参数的存储过程使用带有通配符参数的存储过程【例【例6.3】从三个表的联接中返回指定学生的学号、姓名、所选课程】从三个表的联接中返回指定学生的学号、姓名、所选课程名称及该课程的成绩。该存储过程在参数中使用了模式匹配,如果没有名称及该课程的成绩。该存储过程在参
18、数中使用了模式匹配,如果没有提供参数,则使用预设的默认值。提供参数,则使用预设的默认值。CREATEPROCEDUREst_infonamevarchar(30)=刘刘%ASSELECTa.学号学号,a.姓名姓名,c.课程名课程名,b.成绩成绩FROMXSaINNERJOINXS_KCbONa.学号学号=b.学号学号INNERJOINKCcONc.课程号课程号=b.课程号课程号WHERE姓名姓名LIKEnamest_info存储过程可以有多种执行形式,下面列出了一部分:存储过程可以有多种执行形式,下面列出了一部分:EXECUTEst_info/*参数使用默认值参数使用默认值*/或者或者EXEC
19、UTEst_info王王%/*传递给传递给name的实参为的实参为王王%*/或者或者EXECUTEst_info王张王张%(4)使用带使用带OUTPUT参数的存储过程参数的存储过程用户存储过程的创建与执行【例【例6.4】用于计算指定学生的总学分,存储过程中使用了一个输入参数和一个输出参】用于计算指定学生的总学分,存储过程中使用了一个输入参数和一个输出参数。数。CREATEPROCEDUREtotalcreditnamevarchar(40),totalintOUTPUTASSELECTtotal=SUM(KC.学分学分)FROMXS,XS_KC,KCWHERE姓名姓名=nameANDXS.学号
20、学号=XS_KC.学号学号andXS_KC.课程号课程号=KC.课课程号程号GROUPBYXS.学号学号注意:注意:OUTPUT变量必须在创建表和使用该变量时都进行定义。变量必须在创建表和使用该变量时都进行定义。定义时的参数名和调用时的变量名不一定要匹配,不过数据类型和参数位置必须匹。定义时的参数名和调用时的变量名不一定要匹配,不过数据类型和参数位置必须匹。DECLAREt_creditchar(20),totalintEXECUTEtotalcredit王林王林,totalOUTPUTSELECT王林王林,total(5)使用使用OUTPUT游标参数的存储过程游标参数的存储过程OUTPUT游
21、标参数用于返回存储过程的局部游标。游标参数用于返回存储过程的局部游标。【例【例6.5】在】在XSCJ数据库的数据库的XS表上声明并打开一个游标。表上声明并打开一个游标。CREATEPROCEDUREst_cursorst_cursorCURSORVARYINGOUTPUTASSETst_cursor=CURSORFORWARD_ONLYSTATICFORSELECT*FROMXSOPENst_cursor用户存储过程的创建与执行在如下的批处理中,声明一局部游标变量,执行上述存储过程过程并在如下的批处理中,声明一局部游标变量,执行上述存储过程过程并将游标赋值给局部游标变量,然后通过该游标变量读取
22、记录。将游标赋值给局部游标变量,然后通过该游标变量读取记录。DECLAREMyCursorCURSOREXECst_cursorst_cursor=MyCursorOUTPUTWHILE(FETCH_STATUS=0)BEGINFETCHNEXTFROMMyCursorENDCLOSEMyCursorDEALLOCATEMyCursor(6)使用使用WITHENCRYPTION选项选项WITHENCRYPTION子句对用户隐藏存储过程的文本。子句对用户隐藏存储过程的文本。【例【例6.6】创建加密过程,使用】创建加密过程,使用sp_helptext系统存储过程获取关于加系统存储过程获取关于加密过
23、程的信息,然后尝试直接从密过程的信息,然后尝试直接从syscomments表中获取关于该过程的信息。表中获取关于该过程的信息。CREATEPROCEDUREencrypt_thisWITHENCRYPTIONASSELECT*FROMXS用户存储过程的创建与执行通过系统存储过程通过系统存储过程sp_helptext可显示规则、默认值、未加密的存储过程、可显示规则、默认值、未加密的存储过程、用户定义函数、触发器或视图的文本。用户定义函数、触发器或视图的文本。执行如下语句:执行如下语句:EXECsp_helptextencrypt_this结果集为提示信息:对象备注已加密。结果集为提示信息:对象备
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 存储 过程 触发器
限制150内