创建数据库存储过程与触发器:showscore与s_del
需积分: 1 8 浏览量
更新于2024-09-11
收藏 51KB DOCX 举报
"数据库习题,包括创建存储过程和触发器"
在数据库管理中,存储过程和触发器是两个非常重要的概念。存储过程是预编译的SQL语句集合,可以封装一系列操作,并且可以带有参数,便于重复使用。而触发器是一种特殊的存储过程,它在特定的数据操作(如INSERT、UPDATE或DELETE)发生时自动执行,可以用来实施复杂的业务规则和数据完整性。
题目中的第一个任务是创建一个名为“showscore”的存储过程,用于根据学生姓名显示他们的课程数量、不及格课程数量以及平均成绩。存储过程的实现首先通过JOIN操作连接SC表和S表,基于学生的姓名查询他们选修的课程总数(@Count)和平均成绩(@Avg)。接着,同样通过JOIN查询,但加上成绩小于60的条件,来计算不及格课程的数量(@uCount)。最后,将这些信息格式化后输出。
具体代码如下:
```sql
CREATE PROC showscore
@姓名 varchar(20)
AS
BEGIN
DECLARE @Count INT, @uCount INT, @Avg FLOAT, @Str VARCHAR(300)
SELECT @Count = COUNT(课号), @Avg = AVG(成绩) FROM SC, S WHERE SC.学号 = S.学号 AND S.姓名 = @姓名
SELECT @uCount = ISNULL(COUNT(课程), 0) FROM SC, S WHERE SC.学号 = S.学号 AND S.姓名 = @姓名 AND 成绩 < 60
SET @Str = @姓名 + '同学一共选了' + CAST(@Count AS VARCHAR(3)) + '门课程' + '其中有' + CAST(@uCount AS VARCHAR(3)) + '门不及格' + '其平均成绩为' + CAST(@avg AS VARCHAR(5)) + '分'
PRINT @Str
END
```
这个存储过程执行时,如示例所示,传入学生姓名(例如'王飞'),会显示对应的学生的课程情况。
第二个任务是创建一个名为“s_del”的删除触发器,当尝试从S表中删除学生时,如果该学生在SC表中有选课记录,则阻止删除操作并给出提示;否则,允许删除并将其记录保存到S_BAK表中,用于后续可能的数据恢复。触发器的实现通过检查DELETED表(在删除操作后包含被删除的行)和SC表的交集来判断是否存在选课记录。
具体代码如下:
```sql
CREATE TRIGGER s_del
ON S
FOR DELETE
AS
BEGIN
IF EXISTS (SELECT * FROM SC, DELETED WHERE DELETED.学号 = SC.学号)
BEGIN
RAISERROR('试图删除有课的学生,删除失败!', 16, 1)
END
ELSE
BEGIN
INSERT INTO S_BAK SELECT * FROM DELETED
PRINT '删除成功'
END
END
```
这个触发器在执行删除操作时,如果发现被删除的学生有选课记录,会抛出错误,阻止删除;否则,将被删除的记录插入到S_BAK表中,并打印“删除成功”作为提示。
这两个数据库操作体现了存储过程和触发器在实际应用中的功能,它们能够增强数据库的灵活性和安全性,简化复杂操作,同时也确保了数据的一致性和完整性。
2020-03-20 上传
2023-04-25 上传
2022-12-14 上传
2023-06-08 上传
2023-09-13 上传
2023-08-27 上传
2023-09-03 上传
2023-04-14 上传
2023-06-14 上传
lijuanzhangrongxuan
- 粉丝: 0
- 资源: 4
最新资源
- tcog-filters:从应用程序中丢弃的漂亮小组件
- Excel模板按月份查询财务报表.zip
- ng4:后台管理系统
- CNN-旅行-新闻-文章-抓取器:用于获取新闻文章内容的网络抓取器
- react-boilerplate:使用ES2018,Sass,Webpack 4和Babel 7的React SPA的样板
- matlab-(含教程)基于EKF扩展卡尔曼滤波器从IMU和GPS数据计算路径定位的matlab仿真
- addonmaker:WOW插件的构建和测试工具
- 【地产资料】XX地产 门店经理职责与定位培训P34.zip
- Excel模板销货清单模板 (1).zip
- JMe:前端javascript库(angularjs框架,UI,模板,工具,数据操作,动画)
- 半导体研究专题一:从三个维度看芯片设计.rar
- 毕业设计&课设--毕业设计校园二手交易平台.zip
- wordpress-plugin:模板
- clinic-management-system:诊所管理系统(全栈),技术栈:前端:react + antd + umi + dva + ts后台:nodejs + eggjs + ts
- PHP项目中使用微信扫码支付(模式二)详解
- Excel模板销货清单模板.zip