第十章数据库访问性能优化.ppt
文本预览下载声明
数据库管理系统;第10章 数据库访问性能优化;10.1 存储过程;10.1.1 存储过程概念;存储过程功能;存储过程优点;存储过程优点(续);10.1.2 创建和执行存储过程;示例;示例;示例;参数传递方式;如果在定义存储过程时为参数指定了默认值,则在执行存储过程时可以不为有默认值的参数提供值。
例如,执行例3的存储过程:
EXEC p_StudentGrade3 吴宾
相当于执行:
EXEC p_StudentGrade3 吴宾, Java;示例;示例;执行例5存储过程示例;示例;执行例6存储过程示例;修改数据示例;删除数据示例;插入数据示例;SQL Server提供4种存储过程返回数据的形式
输出参数,既可以返回数据(整型值或字符值等),也可以返回游标变量(游标是可以逐行检索的结果集,具体内容请参见本书第9章)。
返回代码,只能是整型值。
SELECT 语句的结果集,这些语句包含在该存储过程内或该存储过程所调用的任何其它存储过程内。
可从存储过程外引用的全局游标。;例10.建立查询指定系的学生姓名和性别的存储过程,如果用户未指定系名,则返回代码1;如果用户指定的系名不存在,则返回代码2。
CREATE PROC p_Student
@dept varchar(20) = NULL
AS
IF @dept IS NULL RETURN 1 --未指定系名
IF NOT EXISTS(SELECT * FROM Student WHERE Dept = @dept)
RETURN 2 --指定的系名无效
SELECT Sname, Sex FROM Student
WHERE Dept = @dept
调用该存储过程。
DECLARE @ret int
EXEC @ret = p_Student
IF @ret = 1 PRINT 必须指定一个系名
IF @ret = 2 PRINT 指定的系名不存在;例11.根据各种错误设置不同的返回代码值。查询指定课程(课程名)的考试平均成绩,根据每种可能的错误赋予的返回代码。
CREATE PROCEDURE p_GetAvgGrade
@cname varchar(30) = NULL,
@avg_grade int OUTPUT
AS
IF @cname IS NULL -- 验证@cname参数的有效性
RETURN 1
IF (SELECT COUNT(*) FROM Course WHERE Cname = @cname) = 0
RETURN 2
SELECT @avg_grade = AVG(Grade) FROM SC
JOIN Course c ON SC.Cno = c.Cno
WHERE Cname = @cname
IF @avg_grade IS NULL -- 检查该门课程是否有考试
RETURN 3
ELSE
RETURN 0 -- 成功!;DECLARE @ret int,@avg int,@tip varchar(40)
EXEC @ret = p_GetAvgGrade @avg_grade = @avg output
SET @tip = CASE @ret
WHEN 1 THEN 提示1: 必须指定一个课程名!
WHEN 2 THEN 提示2: 指定的课程名不存在!
WHEN 3 THEN 提示3: 指定的课程还没有考试!
END
PRINT @tip
;10.1.4 查看和维护存储过程;1. 查看存储过程;2.修改存储过程;示例;3. 删除存储过程;1.sp_columns
作用:返回当前环境中指定表或视图的列信息。
语法格式:
sp_columns [ @table_name = ] object
[ , [ @table_owner = ] owner ]
?????[ , [ @table_qualifier = ]
qualifier ]
?????[ , [ @column_name = ] column ];例1.查询Student表中包含的列信息。
EXEC sp_columns @table_name = Student;作用:返回当前环境中单个表的主键信息。
语法格式:
sp_pkeys [ @table_name = ] name ????
[ , [ @table_owner = ] owner ]
?? [ , [ @table
显示全部