数据库课件-第五章-存储过程、触发器和数据完整性.ppt
《数据库课件-第五章-存储过程、触发器和数据完整性.ppt》由会员分享,可在线阅读,更多相关《数据库课件-第五章-存储过程、触发器和数据完整性.ppt(56页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第五章第五章存储过程、触发器和数据完整性存储过程、触发器和数据完整性12SQL Server 编程结构存储过程3触发器4数据库完整性5.1 SQL Server5.1 SQL Server编程结构编程结构1 1局部变量的声明格式为:局部变量的声明格式为:DECLARE DECLARE 局部变量名局部变量名 数据类型数据类型 ,局部变量名局部变量名 数据类型数据类型 例:下面的语句声明了两个变量例:下面的语句声明了两个变量variable1variable1和和variable2variable2,数据类型分别为,数据类型分别为intint和和datetimedatetime。DECLARE v
2、ariable1 int,DECLARE variable1 int,variable2 datetime variable2 datetime5.1.1变量变量注注:在同一个在同一个DECLAREDECLARE语句中,可以同时定义多个变量,变语句中,可以同时定义多个变量,变量之间用逗号隔开。量之间用逗号隔开。2 2为局部变量赋值可以采用为局部变量赋值可以采用SETSET语句或语句或SELECTSELECT语句:语句:lSET SET 变量名变量名=表达式表达式lSELECT SELECT 变量名变量名=表达式表达式lSELECT SELECT 列列1,1,列列n n 变量名变量名=表达式表达
3、式 FROM FROM 表名表名 WHERE WHERE 条件表达式条件表达式5.1.1 5.1.1 变量变量注注:1):1)如果如果SELECTSELECT语句返回多个数值,则局部变量取最后一个语句返回多个数值,则局部变量取最后一个返回值。返回值。2)SELECT2)SELECT语句的赋值功能和查询功能不能混合使用,否则语句的赋值功能和查询功能不能混合使用,否则系统会产生错误信息。系统会产生错误信息。5.1.2 5.1.2 显示信息显示信息1 1PRINTPRINT语句语句注意:使用注意:使用PRINTPRINT语句只能显示字符数据类型。语句只能显示字符数据类型。2 2RAISERRORRA
4、ISERROR语句语句语法如下:语法如下:RAISERROR(RAISERROR(|,严重度严重度,状态状态,参数参数1,1,参数参数2)2)5.1.3 5.1.3 注释语句注释语句语法为:语法为:/*/*注释文本注释文本*/或或 -注释文本注释文本 5.1.4 5.1.4 批处理批处理批处理是成组执行的一条或多条批处理是成组执行的一条或多条T-SQLT-SQL指令指令,被作,被作为整体进行语法分析、优化、编译和执行。如果为整体进行语法分析、优化、编译和执行。如果批处理的任何部分在语法上不正确,或批处理参批处理的任何部分在语法上不正确,或批处理参照的对象不存在,则整个批处理无法执行。照的对象不
5、存在,则整个批处理无法执行。GOGO语句语句用于指定批处理语句的结束处,单独占用用于指定批处理语句的结束处,单独占用一行。一行。GOGO本身并不是本身并不是T-SQLT-SQL语句的组成部分,它只语句的组成部分,它只是一个用于表示批处理结束的前端指令。是一个用于表示批处理结束的前端指令。注意:注意:(1 1)不能在同一个批处理中删除数据库对象(表、视图或)不能在同一个批处理中删除数据库对象(表、视图或存储过程等),然后又引用或重新创建它们。存储过程等),然后又引用或重新创建它们。(2 2)不能在同一个批处理中,修改表的列后又引用它。)不能在同一个批处理中,修改表的列后又引用它。(3 3)用)用
6、SETSET语句设置的选项只在批处理结束时才使用,可以语句设置的选项只在批处理结束时才使用,可以将将SETSET语句与查询在批处理中组合起来,但有些语句与查询在批处理中组合起来,但有些SETSET选项不选项不能在批处理中使用。能在批处理中使用。5.1.5 5.1.5 流程控制语句流程控制语句1 1BEGINBEGINENDEND语句语句语法形式如下:语法形式如下:BEGINBEGIN 语句语句 ENDEND2 2IFIFELSEELSE语句语句语法形式如下:语法形式如下:IF IF 条件表达式条件表达式 语句语句 ELSE IFELSE IF条件表达式条件表达式 语句语句 执行过程为:执行过程
7、为:如果条件表达如果条件表达式为真,则执行式为真,则执行IFIF后面的后面的语句或语句块,如果条件语句或语句块,如果条件表达式为假,则执行表达式为假,则执行ELSEELSE后面的语句或语句块。后面的语句或语句块。【例例5.15.1】在电力抢修工程数据库中,如果在电力抢修工程数据库中,如果stockstock表表中存在库存量低于中存在库存量低于1 1的物资,就显示文本:的物资,就显示文本:the the amount is not enoughamount is not enough;否则显示所有物资信息。;否则显示所有物资信息。5.1.5 5.1.5 流程控制语句流程控制语句IF exists
8、(SELECT*FROM stock where amount1)PRINT the amount is not enough!ELSE BEGIN SELECT*FROM stock END 注意:注意:IFIF语句常与关键字子语句常与关键字子EXISTSEXISTS结合使用,用于检测是否存在满结合使用,用于检测是否存在满足条件的记录,只要检测到有一行记录存在,就为真。足条件的记录,只要检测到有一行记录存在,就为真。3 3WHILEWHILE循环语句循环语句 语法形式如下:语法形式如下:WHILE WHILE 逻辑表达式逻辑表达式 语句语句【例例5.25.2】将将stockstock表中所有
9、物资单价增加表中所有物资单价增加10%10%,直到有一个,直到有一个物资单价超过物资单价超过1500015000或单价总和超过或单价总和超过5000050000为止。为止。WHILE(SELECT sum(unit)FROM stock)50000WHILE(SELECT sum(unit)FROM stock)15000)IF EXISTS(SELECT*FROM stock WHERE unit15000)break break ELSE ELSE continue continue END END5.1.5 5.1.5 流程控制语句流程控制语句4 4GOTOGOTO语句语句语法形式如下:
10、语法形式如下:GOTO lableGOTO lable lable:lable:6 6WAITFORWAITFOR语句语句 语法形式如下:语法形式如下:WAITFOR DELAY WAITFOR DELAY 时间时间|TIME|TIME 时间时间 其中,其中,DELAYDELAY表示等候由表示等候由“时间时间”参数指定的参数指定的时间间隔,时间间隔,TIMETIME表示等候到指定的表示等候到指定的“时间时间”为止。为止。时间参数的数据类型为时间参数的数据类型为datetimedatetime,但不带日期,但不带日期,格式为格式为hh:mm:sshh:mm:ss。5.1.5 5.1.5 流程控制
11、语句流程控制语句5 5RETURNRETURN语句语句语法格式为:语法格式为:RETURN RETURN 整型表达式整型表达式【例例5.35.3】使用使用WAITFORWAITFOR语句表示等待一分钟后,显示语句表示等待一分钟后,显示stockstock表。等到中午表。等到中午12:00:0012:00:00时,显示时,显示salvagingsalvaging表。表。WAITFOR DELAYWAITFOR DELAY 00:01:00 00:01:00 SELECT*FROM stock SELECT*FROM stockWAITFOR TIMEWAITFOR TIME 12:00:00 1
12、2:00:00 SELECT*FROM salvaging SELECT*FROM salvaging5.1.5 5.1.5 流程控制语句流程控制语句7.CASE7.CASE语句语句(1)(1)格式一格式一 CASE CASE WHEN WHEN THEN THEN 1 WHEN WHEN THEN THEN 2 ELSE ELSE n END END【例例5.45.4】用用CASECASE语句格式一实现:在对语句格式一实现:在对stockstock表的查询中,当仓表的查询中,当仓库号的值是库号的值是“供电局供电局1 1号仓库号仓库”、“供电局供电局2 2号仓库号仓库”、“供电供电局局3 3号
13、仓库号仓库”时分别返回时分别返回“北京北京”、“上海上海”、“广州广州”,否,否则返回则返回“未知未知”。SELECT mat_num,mat_name,speci,amount,unit,total,SELECT mat_num,mat_name,speci,amount,unit,total,warehouse warehouse=CASE=CASE warehouse warehouse WHEN WHEN 供电局供电局1#1#仓库仓库THEN THEN 北京北京 WHEN WHEN 供电局供电局2#2#仓库仓库THEN THEN 上海上海 WHEN WHEN 供电局供电局3#3#仓库仓
14、库THEN THEN 广州广州 ELSE ELSE 未知未知 ENDEND FROM stockFROM stock(2)(2)格式二格式二CASECASE WHEN WHEN THEN THEN 1 WHEN WHEN THEN THEN 2 ELSE ELSE nENDEND【例例5.55.5】用用CASECASE语句格式二实现:在对语句格式二实现:在对stockstock表的查询中,当表的查询中,当仓库号的值是仓库号的值是“供电局供电局1 1号仓库号仓库”、“供电局供电局2 2号仓库号仓库”、“供电局供电局3 3号仓库号仓库”时分别返回时分别返回“北京北京”、“上海上海”、“广州广州”,
15、否则返回,否则返回“未知未知”。SELECT mat_num,mat_name,speci,amount,unit,total,SELECT mat_num,mat_name,speci,amount,unit,total,warehouse warehouse=CASE=CASE WHEN warehouse=WHEN warehouse=供电局供电局1#1#仓库仓库THEN THEN 北京北京 WHEN warehouse=WHEN warehouse=供电局供电局2#2#仓库仓库THEN THEN 上海上海 WHEN warehouse=WHEN warehouse=供电局供电局3#3#
16、仓库仓库THEN THEN 广州广州 ELSE ELSE 未知未知 END END FROM stockFROM stock5.2 5.2 存储过程存储过程5.2.15.2.1存储过程的基本概念存储过程的基本概念 存储在数据库服务器中的存储在数据库服务器中的一组编译成单个执一组编译成单个执行计划的行计划的SQLSQL语句语句。在使用。在使用Transact-SQLTransact-SQL语言编程语言编程的过程中,可以将某些需要多次调用以实现某个的过程中,可以将某些需要多次调用以实现某个特定任务的代码段编写成一个过程,将其保存在特定任务的代码段编写成一个过程,将其保存在数据库中,并由数据库中,并
17、由SQL ServerSQL Server服务器通过过程名调服务器通过过程名调用,称为存储过程。用,称为存储过程。优点:优点:1)1)运行效率高,提供了在服务器端快速执行运行效率高,提供了在服务器端快速执行SQLSQL语句的有效途径。语句的有效途径。2)2)降低了客户机和服务器之间的通信量。降低了客户机和服务器之间的通信量。3)3)方便实施企业规则。方便实施企业规则。存储过程和非存储过程操作示意存储过程和非存储过程操作示意 5.2.1存储过程的基本概念存储过程的基本概念5.2.2 5.2.2 创建存储过程创建存储过程 创建存储过程的创建存储过程的SQLSQL语句格式为:语句格式为:CREATE
18、 PROCEDURE CREATE PROCEDURE 存储过程名存储过程名 ;版本号;版本号 参数参数 数据类型数据类型 VARYING =VARYING =默认值默认值 OUTPUT,OUTPUT,WITHRECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION WITHRECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION FOR REPLICATION FOR REPLICATION AS AS SQL SQL语句语句1 1基本存储过程基本存储过程【例例5.65.6】创建一个最简单的存储过程,用于返回创建一个最简单的存储过程,用于返
19、回stockstock表中的所有记录。表中的所有记录。CREATE PROCEDURE exp1CREATE PROCEDURE exp1 AS AS SELECT*SELECT*FROM stock FROM stock5.2.2 5.2.2 创建存储过程创建存储过程执行存储过程执行存储过程:EXECUTE EXECUTE =存储过程名存储过程名 =|执行执行exp1exp1:EXECUTE exp1EXECUTE exp1或者:或者:EXEC exp1EXEC exp12 2带参数的存储过程带参数的存储过程【例例5.75.7】创建一个存储过程,通过输入的仓库名称创建一个存储过程,通过输入的
20、仓库名称显示出该仓库的所有库存物资信息。显示出该仓库的所有库存物资信息。CREATE PROCEDURE exp2 CREATE PROCEDURE exp2 ckmc varchar(50)ckmc varchar(50)AS AS SELECT*SELECT*FROM stock FROM stock WHERE warehouse WHERE warehouse=ckmc=ckmc5.2.2 5.2.2 创建存储过程创建存储过程【例例5.85.8】创建一个带输入参数的存储过程,向创建一个带输入参数的存储过程,向stockstock表中添加一个表中添加一个新的数据行。新的数据行。CREAT
21、E PROCEDURE exp3CREATE PROCEDURE exp3 mno char(8),mname varchar(50),mspeci varchar(20)mno char(8),mname varchar(50),mspeci varchar(20)ASAS INSERT INSERT INTO stock(mat_num,mat_name,speci)INTO stock(mat_num,mat_name,speci)VALUES VALUES(mno,mname,mspeci)(mno,mname,mspeci)执行该存储过程:执行该存储过程:EXECUTE exp3 m
22、030,EXECUTE exp3 m030,护套绝缘电线护套绝缘电线,BVV-35,BVV-35或者:或者:EXECUTE exp3 mno=m030,mname=EXECUTE exp3 mno=m030,mname=护套绝缘电线护套绝缘电线,mspeci=BVV-35mspeci=BVV-35或者:或者:EXECUTE exp3 mname=EXECUTE exp3 mname=护套绝缘电线护套绝缘电线,mspeci=BVV-35,mspeci=BVV-35,mno=m030mno=m030注意注意:为了确保为了确保CreateCreate命令能成功执行,可以在命令能成功执行,可以在Cre
23、ate Create ProcedureProcedure之前执行如下语句:之前执行如下语句:IF EXISTS(SELECT name FROM sysobjects WHERE IF EXISTS(SELECT name FROM sysobjects WHERE name=exp3 and type=P)name=exp3 and type=P)DROP PROCEDURE exp3 DROP PROCEDURE exp3 GO GO 5.2.2 5.2.2 创建存储过程创建存储过程3 3带默认参数的存储过程带默认参数的存储过程【例例5.95.9】创建一个带默认参数的存储过程,通过传递的
24、参创建一个带默认参数的存储过程,通过传递的参数显示物资的名称、规格、项目名称、是否按期完工等信数显示物资的名称、规格、项目名称、是否按期完工等信息,如果没有提供参数,则使用预设的默认值。息,如果没有提供参数,则使用预设的默认值。CREATE PROCEDURE exp4 CREATE PROCEDURE exp4 mname varchar(50)=%mname varchar(50)=%绝缘绝缘%,pno char(8)=20110001%,pno char(8)=20110001 AS AS SELECT mat_name,speci,prj_name,prj_status SELECT
25、mat_name,speci,prj_name,prj_status FROM stock,salvaging,out_stock FROM stock,salvaging,out_stock WHERE stock.mat_num=out_stock.mat_num WHERE stock.mat_num=out_stock.mat_num and salvaging.prj_num=out_stock.prj_num and salvaging.prj_num=out_stock.prj_num and and mat_name like mname mat_name like mname
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 课件 第五 存储 过程 触发器 数据 完整性
限制150内