实验5《触发器与游标》

一、实验目的

进一步熟悉SQL语句对数据库进行完整性控制的方法;理解触发器的概念、定义方法和触发条件。理解游标的定义、打开、使用、关闭与释放的方法。

二、实验内容

1)设置一个触发器,该触发器仅允许“dbo”用户可以删除学生表内数据。
2)针对学生表写一个DELETE触发器。
3)针对学生表写一个UPDATE触发器。
4)统计学生的平均成绩,输出低于平均分的成绩(使用游标)。

三、实验方法与实验步骤

(1)实验方法:
1.熟悉DBMS 工作环境;
2.复习有关SQL语句对数据库进行完整性控制的方法;复习触发器的概念、定义方法和触发条件。复习游标的定义、打开、使用、关闭与释放的方法约束与存储过程的SQL语言命令。

(2)实验步骤:
1)设置一个触发器,该触发器仅允许“dbo”用户可以删除学生表内数据,否则出错。
2)针对学生表写一个DELETE触发器,删除数据,测试触发。
3)针对学生表写一个UPDATE触发器,更新数据,测试触发。
4)定义游标,统计学生的平均成绩,输出低于平均分的成绩。

四、实验结果

1)设置一个触发器,该触发器仅允许“dbo”用户可以删除学生表内数据,否则出错。

CREATE TRIGGER dboDelete
ON S
FOR DELETE
AS
		BEGIN
			IF user='dbo'
				commit
			ELSE
				BEGIN
					PRINT '不是dbo用户,不能删除!'
					ROLLBACK
				END
		END
		
DELETE FROM S WHERE Sname='金宸';

在这里插入图片描述
2)针对学生表写一个DELETE触发器,删除数据,测试触发。

CREATE TRIGGER s_delete
ON S
FOR DELETE
AS
		BEGIN
			PRINT '测试触发'
		END

DELETE FROM S WHERE Sname='金宸';

在这里插入图片描述

3)针对学生表写一个UPDATE触发器,更新数据,测试触发。

CREATE TRIGGER s_update
ON S
FOR UPDATE
AS
		BEGIN
			PRINT '测试触发'
	END

DELETE FROM S WHERE Sname='金宸';

在这里插入图片描述

4)定义游标,统计学生的平均成绩,输出低于平均分的成绩。

/*定义游标,统计学生的平均成绩,输出低于平均分的成绩。*/
--1.声明游标中使用到的变量
Declare @low_score varchar(32)
--2.声明游标
Declare s_score_cursor CURSOR FOR
	select avg(SC.grade) from SC group by SC.Sno having avg(SC.grade)<(select avg(SC.grade) from SC);
--3.打开游标
Open s_score_cursor
--4.推进游标
FETCH NEXT FROM s_score_cursor INTO @low_score
--5.逐行操作
WHILE @@FETCH_STATUS=0
	BEGIN
		PRINT '输出低于平均分的成绩:'+@low_score
		FETCH NEXT FROM s_score_cursor INTO @low_score
	END
--6.关闭游标
CLOSE s_score_cursor
--7.释放游标
Deallocate s_score_cursor

在这里插入图片描述

五、实验小结

本次实验主要学会了如何利用触发器对数据库中的数据进行进一步完整性约束,对触发器的理解更加深刻。同时学会了利用游标操作进行对查询等结果逐行操作,使用游标六步走、变量类型等细节处理。
  遇到的问题主要是在使用游标时不够熟练,在输出低于平均分的成绩时,类型转换不成功;

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZenSheep

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值