创建数据库存储过程与触发器:showscore与s_del
需积分: 1 199 浏览量
更新于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-07-13 上传
2013-12-17 上传
2023-05-31 上传
2015-08-09 上传
2015-06-30 上传
2014-04-22 上传
lijuanzhangrongxuan
- 粉丝: 0
- 资源: 4
最新资源
- Haskell编写的C-Minus编译器针对TM架构实现
- 水电模拟工具HydroElectric开发使用Matlab
- Vue与antd结合的后台管理系统分模块打包技术解析
- 微信小游戏开发新框架:SFramework_LayaAir
- AFO算法与GA/PSO在多式联运路径优化中的应用研究
- MapleLeaflet:Ruby中构建Leaflet.js地图的简易工具
- FontForge安装包下载指南
- 个人博客系统开发:设计、安全与管理功能解析
- SmartWiki-AmazeUI风格:自定义Markdown Wiki系统
- USB虚拟串口驱动助力刻字机高效运行
- 加拿大早期种子投资通用条款清单详解
- SSM与Layui结合的汽车租赁系统
- 探索混沌与精英引导结合的鲸鱼优化算法
- Scala教程详解:代码实例与实践操作指南
- Rails 4.0+ 资产管道集成 Handlebars.js 实例解析
- Python实现Spark计算矩阵向量的余弦相似度