实验内容与完成情况(记录所有的实验过程):

1、对学生课程数据库,编写并执行三个存储过程,分别完成下面功能:

(1)统计某一门课的成绩分布情况,即用户输入某一门课程的名称,就可统计出该课程各分数段分布的人数。还要求写出执行存储过程的语句和执行结果。

(答题参考:1. 先建立一个表Rank用来存放存储过程执行后的结果,其中第一列division显示成绩分段划分,第二列sub_sum显示的是成绩在该分数段的学生人数。2. 存储过程带有一个字符型参数@name,用于接受,即用户输入某一门课程的名称,就可统计出该课程各分数段分布的人数。还要求写出执行存储过程的语句和执行结果。用户输入课程名称,便于统计不同课程的分数分布情况。3. 程序中应该判断是否存在用户输入的课程名称,如果不存在要向用户提示:'输入错误,没有该课程!'。建议利用@@ROWCOUNT来判断。)

CREATE TABLE Rank( division CHAR(20), sub_sum INT);

select * from rank   --存储过程执行完后,rank表中存放的就是这门课程的成绩分布情况

division             sub_sum

-------------------- -----------

[0,60)               0

[60,70)              0

[70,80)              0

[80,90)              1

[90,100]             1

CREATE TABLE Rank(

division char(20),

sub_sum int

);

INSERT INTO Rank(division)

VALUES('[0,60)'),('[60,70)'),('[70,80)'),('[80,90)'),('[90,100]');

GO

CREATE PROCEDURE printcourse @pcname char(20)

AS

DECLARE @pcno char(20),@pcount int

UPDATE Course SET Cname=@pcname WHERE Cname=@pcname

IF(@@ROWCOUNT=0)

BEGIN

RAISERROR('您输入的课程号不存在,请重新输入!', 16, 1)

RETURN

END

SELECT @pcno=SC.cno FROM Course,SC WHERE Course.Cno=SC.Cno AND Course.Cname=@pcname

SELECT @pcount=COUNT(*) FROM SC WHERE Grade<60 AND Cno=@pcno

UPDATE Rank SET sub_sum=@pcount WHERE division='[0,60)'

SELECT @pcount=COUNT(*) FROM SC WHERE Grade>=60 AND Grade<70 AND Cno=@pcno

UPDATE Rank SET sub_sum=@pcount WHERE division='[60,70)'

SELECT @pcount=COUNT(*) FROM SC WHERE Grade>=70 AND Grade<80 AND Cno=@pcno

UPDATE Rank SET sub_sum=@pcount WHERE division='[70,80)'

SELECT @pcount=COUNT(*) FROM SC WHERE Grade>=80 AND Grade<90 AND Cno=@pcno

UPDATE Rank SET sub_sum=@pcount WHERE division='[80,90)'

SELECT @pcount=COUNT(*) FROM SC WHERE Grade>=90 AND Grade<=100 AND Cno=@pcno

UPDATE Rank SET sub_sum=@pcount WHERE division='[90,100]'

EXEC printcourse '数据库'

SELECT * FROM Rank

(2)统计某一门课的平均成绩。(建议:存储过程可带有一个字符型参数值,接受用户输入的课程名称,一个输出参数[用output声明]用于存放返回给调用者的这门课程的平均成绩)。还要求写出执行存储过程的语句和执行结果。

执行结果形为:

数学课的平均成绩为:82.0

CREATE PROCEDURE printavg_course @pcname char(20),@pavg int output

AS

DECLARE @pcno char(20)

UPDATE Course SET Cname=@pcname WHERE Cname=@pcname

IF(@@ROWCOUNT=0)

BEGIN

RAISERROR('您输入的课程号不存在,请重新输入!', 16, 1)

RETURN

END

SELECT @pcno=SC.cno FROM Course,SC WHERE Course.Cno=SC.Cno AND Course.Cname=@pcname

SELECT @pavg=AVG(SC.Grade) FROM SC WHERE Cno=@pcno

PRINT RTrim(@pcname)+'的平均成绩为:'+CAST(@pavg AS char(5))

GO

DECLARE @pavg int

EXEC printavg_course '数据库',@pavg output

(3)附加题:将学生选课成绩从百分制改为等级制(即A、B、C、D、E五级)。

执行结果形如:

sno       cno  Grade Classified   grade

--------- ---- ---------------- ----------

200215121 4    成绩为空!            NULL

200215121 6    成绩为空!            NULL

200215121 7    成绩为空!            NULL

200215122 5    成绩为空!            NULL

200215125 1    成绩为空!            NULL

200215126 6    不及格               55

200215122 2    良                   80

200215121 2    良                   85

200215121 3    良                   88

200215121 1    优                   92

200215122 1    优                   92

(11 行受影响)

CREATE PROCEDURE printclass_grade

AS

SELECT Sno,Cno,Grade,

CASE

WHEN Grade<60 THEN '不及格'

WHEN Grade>=60 AND Grade<70 THEN '及格'

WHEN Grade>=70 AND Grade<80 THEN '中'

WHEN Grade>=80 AND Grade<90 THEN '良'

WHEN Grade>=90 AND Grade<=100 THEN '优'

ELSE '成绩为空!'

END AS 'Grade Classified'

FROM SC

EXEC  printclass_grade

2、对SPJ数据库,创建一个存储过程ins_s_count,功能为根据提供的供应商号,供应商名,供应商所在地等信息,往S表中插入数据,并返回插入该记录之后,S表中的记录数。调用该存储过程实现往S表中插入一条记录(‘S6’,’天盛’,‘福州’),并显示插入该记录之后,S表中的记录数。

CREATE PROCEDURE ins_s_count @psno char(20),@psname char(20),@pstatus int,@pcity char(20)

AS

DECLARE @pcount int

INSERT INTO S(SNO,SNAME,STATUS,CITY)

VALUES(@psno,@psname,@pstatus,@pcity)

SELECT @pcount=COUNT(*) FROM S

PRINT 'S表中的记录数:'+CAST(@pcount AS char(5))

EXEC ins_s_count 'S6','天盛',35,'福州'

3、查看存储过程的定义和内容

(1)定义

存储过程(Stored Procedure)

是存储在服务器上的 Transact-SQL 语句的命名集合

是封装重复性任务的方法

支持用户声明变量、条件执行以及其他强有力的编程特性

(2)内容

存储过程与其他编程语言中的过程类似,它可以

包含执行数据库操作(包括调用其他过程)的编程语句

接受输入参数

向调用过程或批处理返回状态值,以表明成功或失败(以及失败原因)

以输出参数的形式将多个值返回至调用过程或批处理

实验七: 存储过程相关推荐

  1. 数据库实验 实验七 存储过程与触发器

    注:此内容仅仅只是记录成长与分享学习,不能保证绝对正确 实验七 存储过程与触发器 实验日期: 2022 年 5 月 20 日  星期 五  实验地点: 宿舍 一 实验目的 1. 掌握SQL Serve ...

  2. 数据库实验七 存储过程实验

    1.实验目的 掌握数据库存储过程的设计和使用方法. 2.实验内容和要求 存储过程的定义,存储过程运行,存储过程更名,存储过程删除.    3.实验步骤 (1)定义一个存储过程proc1,更新所有订单( ...

  3. 数据库实验七:存储过程实验

    数据库实验七:存储过程实验 233333,实验八的时候总感觉好像实验七计算的公式不太对,懒得改了就这样吧2333 定义一个存储过程proc2,更新给定订单的(含税折扣价)的总价,执行这个存储过程. 定 ...

  4. 数据库系统概论 实验报告答案 实验七:视图、索引及数据安全

    实验七:视图.索引及数据安全 一.实验目的 1.    掌握视图特点: 2.    掌握使用SQL Server 2008创建及管理视图: 3.    掌握在对象资源管理器和T-SQL语句中创建和管理 ...

  5. 数据库实验七——视图、索引及数据安全

    实验七:视图.索引及数据安全 一.实验目的 1.掌握视图特点: 2.掌握使用SQL Server 2008创建及管理视图: 3.掌握在对象资源管理器和T-SQL语句中创建和管理索引: 二.实验学时 2 ...

  6. 【数据库】实验七~十三

    实验七 数据基本查询 所有的查询全部用 Transact-SQL 语句实现.此部分查询包括投影.选择条件表达.数 据排序.使用临时表等. 对 EDUC 数据库实现以下查询: (可根据数据表中的数据,对 ...

  7. 实验七 访问列表配置

    实验七 访问列表配置 预备知识: ACL指令的放置顺序是很重要的. 当路由器在决定是否转发或者阻止数据报的时候,Cisco的IOS软件,按照ACL中指令的顺序依次检查数据报是否满足某一个指令条件. 当 ...

  8. c语言实验七实验报告,C语言实验七 数 实验报告.doc

    C语言实验七 数 实验报告 C语言程序设计 实 验 报 告 实验题目 实验七 函数 实验目的 掌握函数定义的方法: 掌握函数实参与形参的对应关系,以及值传递的方式. 掌握函数的嵌套调用和递归调用的方法 ...

  9. c语言实验七 函数实验报告,C语言实验七函数实验报告.doc

    C语言实验七函数实验报告 C语言程序设计 实 验 报 告 实验题目 实验七 函数 实验目的 掌握函数定义的方法: 掌握函数实参与形参的对应关系,以及值传递的方式. 掌握函数的嵌套调用和递归调用的方法: ...

  10. java实验 输入输出流_java实验七 输入输出流

    有关java的实验和程序 实验七 输入输出流 一.实验目的和要求 目的: 1.掌握使用输入输出流进行文件的读写操作. 要求: 1.实验报告给出内容1,2的填充代码以及内容3的全部源代码. 二.实验内容 ...

最新文章

  1. Hibernate validation annonation
  2. 异常空格,ASCII (194,160)问题
  3. 44_pytorch数据增强,Resize,Flip,Rotate,Random Move Crop,Scale,Crop Part,Noise
  4. 第七章 DevOps工具链
  5. 《C语言编程初学者指南》一1.9 本章小结
  6. 值不值 | 三分钟搞定jpa?值不值!
  7. 巨坑:从Sqoop导入MySQL导入TINYINT(1)类型数据到hive(tinyint),数据为null
  8. 新版本发布潮:Ceylon 1.2、Node.js 5.0和Atom 1.1
  9. 拓端tecdat|R语言中编写最小工作示例(MWRE)
  10. android坐标画图软件下载,几何平板Geometry Pad(绘图,测量数字坐标轴)2.7.0
  11. 计算机课反思的作文600字,中考反思作文600字6篇
  12. Bumped!【迪杰斯特拉消边、堆优化】
  13. chrome 自动加载ajax.googleapis,使用Redirector插件解决googleapis公共库加载的问题
  14. 最好用的工程资料软件
  15. 芯动科技2023校招 FPGA岗位笔试
  16. 天才小毒妃 第961章 她不后悔就够了
  17. java红牛农场,在新加坡的,完一朋友一个夜班喝5瓶红牛。 下班坐地
  18. 结合北斗PPP_B2b 导航电文进行精密定位(PPP)
  19. echarts如何将柱形图的柱子分割成一小块一小块,也就是象形柱图
  20. 轻武宽带认证计费系统白皮书2019

热门文章

  1. HTML5的SVG画个五角星
  2. 1_15_python基础学习_0501
  3. 处理器哪个好_a14处理器和骁龙865哪个好 a14处理器和骁龙865区别对比_CPU_硬件教程...
  4. 2021-2027全球与中国绝对防水胶带市场现状及未来发展趋势
  5. html画一个倒三角,css 三角形画法
  6. 常用的自媒体工具有哪些?推荐4个常用辅助工具
  7. 基于 i.MX8MP的智能巡检机器人应用方案
  8. 第七届河南省程序设计大赛——B 物资调度
  9. 【iOS开发】跨平台开发再次袭来
  10. get,post请求方式详解