数据库实验报告 (6)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一实验题目

1.存储过程的定义和使用

2.触发器的创建与使用

二实验目的

1.掌握存储过程的定义、执行和调用方法。

2.掌握触发器的创建与使用。

三实验内容

1.存储过程的定义和使用

(1)创建存储过程查找姓李的学生的选修课成绩信息。

(2)创建存储过程,统计每个学生的选修课的总成绩,显示成绩最好的前3名学生成绩。

(3)创建存储过程,查找某门课的最高分(带输入参数的存储过程)。

(4)创建存储过程,统计某个同学的平均分并返回统计结果。(带输入和输出参数的存储过程)

(5)创建存储过程,统计某门课选修的人数,将人数返回。(带返回值的存储过程)

(6)创建存储过程,统计选修课程最多的学生的基本信息。(存储过程的嵌套)

2.触发器的创建与使用

(1)定义一个BEFORE行级触发器credit_TRIGER,当为C表插入新的课程信息时,若学分大于5

分,自动修改为5分。

(2)定义一个AFTER行级触发器,当SC表的成绩发生变动时,就自动在成绩变化表sc_log中增

加一条新的纪录,该新纪录包括:操作者名称、操作日期、操作类型。

(3)建立一个DELETE触发器,针对于SC表,每次只能删除一条信息。

(4)建立一个UPDATE的触发器,不允许用户更改学生学号,若更改学号,给出提示信息:学号

不允许更改。

(5)执行相应的SQL语句,触发上述定义的触发器。

(6)删除触发器credit_TRIGER。

四实验步骤

1.存储过程的定义和使用

存储过程格式:

CREATE PROC [ EDURE ] procedure_name [ ; number ]

[ { @parameter data_type }

[ VARYING ] [ = default ] [ OUTPUT ]

[ WITH

{ RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]

[ FOR REPLICATION ]

AS sql_statement [ ...n ]

创建存储过程查找姓李的学生的选修课成绩信息。

(1)创建存储过程,统计每个学生的选修课的总成绩,显示成绩最好的前3名学生成绩。

SC表基本情况如图表1所示:

图表 1

代码:

create proc p_sumscore

as

select TOP 3 sum(Grade)as 总成绩from SC group by Sno

exec p_sumscore

运行结果:

命令已成功完成。

显示结果如图表2:

图表2总成绩前三名

(2)创建存储过程,查找某门课的最高分(带输入参数的存储过程)。

代码:

create proc p_maxscore

as

@course

select distinct max(Grade)as 最高成绩from SC where Cno=@course

运行结果:

第 3 行: '@course' 附近有语法错误。

必须声明变量'@course'。

必须声明变量;且create proc 必须为第一条语句

正确代码:

create proc p_maxscore(@course nchar(6))

as

select distinct max(Grade)as 最高成绩from SC where Cno=@course group by Cno exec p_maxscore'0001'

运行结果:

命令已成功完成。

显示结果如图表3:

图表3课程号为0001的最高分为68

(3)创建存储过程,统计某个同学的平均分并返回统计结果。(带输入和输出参数的存储过程)代码:

create procedure p_avg @Sno char(10),@Result int output

as

select @Result =(select avg(Grade)from SC

where Sno=@Sno)

运行结果:

命令已成功完成。

declare @Result int,@Sno char(10)

set @Sno ='0002'

exec p_avg @Sno ,@Result output

print '学号为'+@Sno+'的平均分:'+cast(@Result as char(2))

运行结果:

学号为0002 的平均分:79

(4)创建存储过程,统计某门课选修的人数,将人数返回。(带返回值的存储过程)

代码:

create procedure p_num @Cno char(10),@Num int output

as

select @Num =(select count(Cno)from SC

where Cno=@Cno)

运行结果:

命令已成功完成。

declare @Num int,@Cno char(4)

set @Cno ='0002'

exec p_num @Cno ,@Num output

print '课程号为'+@Cno+'的人数:'+cast(@Num as char(2))

运行结果:

图表4选修课程号为0002的人数为2

(5)创建存储过程,统计选修课程最多的学生的基本信息。(存储过程的嵌套)

代码:

CREATE PROCEDURE p_max

As

select * from S

相关文档
最新文档