数据库系统原理 实验(实习)报告——存储过程和触发器

这篇实验报告详细介绍了存储过程和触发器的使用。在存储过程部分,包括了无参数、带输入参数以及带输入输出参数的存储过程创建与执行。触发器部分涉及了如何验证和定义触发器,以确保数据的完整性和一致性。

一、实验目的

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

2、了解触发器的定义和执行方法。

二、实验内容与步骤

1、存储过程

(1)(无参数)用命令方式创建并执行一个存储过程,查询成绩不及格的学生的学号姓名专业、课号课名及相应分数。(语法格式可参考教材例6.13)

语句:

USE StudentCourse

IF EXISTS (SELECT name FROM sysobjects

                WHERE name = 'Stu_info' AND type = 'P')

        DROP PROCEDURE Stu_info

GO

CREATE PROCEDURE Stu_info

AS

SELECT  a.学号,a.姓名,a.专业名,c.课程号,c.课程名,b.成绩

    FROM Student a JOIN StuCourse b

        ON a.学号 = b.学号 LEFT JOIN Course c

        ON b.课程号 = c.课程号

    WHERE b.成绩 < 60

GO

EXECUTE Stu_info结果:

(2)(带输入参数)用命令方式创建并执行一个的存储过程,该存储过程带有输入参数@stu_no,从选课表中查询学号是@stu_no的学生的选课信息。(语法格式可参考教材例6.14)

语句:

USE StudentCourse

IF EXISTS(SELECT name FROM sysobjects

                WHERE name = 'StuCou_info'AND type = 'P')

                DROP PROCEDURE StuCou_info

GO

CREATE PROCEDURE StuCou_info

    @stu_no CHAR(6)

    AS

    SELECT b.学号,a.课程号,a.课程名

    FROM Course a left join StuCourse b on a.课程号 = b.课程号

    WHERE b.学号 = @stu_no

    GO

EXEC StuCou_info @stu_no = '070101'

结果:

(3)(带输入参数和输出参数)用命令方式创建并执行一个的存储过程,该存储过程带有输入参数@stu_no和输出参数@stu_avg,从选课表中查询学号是@stu_no的学生的成绩平均分并赋值给输出参数@stu_avg。(语法格式可参考教材例6.16)

语句:

USE StudentCourse

IF EXISTS(SELECT name FROM sysobjects

                WHERE name = 'Total_info'AND type = 'P')

                DROP PROCEDURE Total_info

GO

CREATE PROCEDURE Total_info

    @stu_no char(6),

    @stu_avg real OUTPUT

AS

SELECT @stu_avg = AVG(成绩)

    FROM StuCourse

    WHERE 学号 = @stu_no

GO

DECLARE @tot real

EXEC Total_info'070101',@tot OUTPUT

SELECT '070101' AS 学号,@tot AS 平均成绩

结果:

2、触发器

(1)完成教材实验8内容3(注:rollback表示回滚,表示取消刚刚进行的操作);

验证触发器:分别执行

INSERT INTO StuCourse VALUES('070208','1001',70)

INSERT INTO StuCourse VALUES('070110','2001',70)

插入是否能够成功?为什么?

语句:自己写

结果:

第一条语句插入失败的原因:在StuCourse表中插入重复键,插入失败。

第二条语句插入失败的原因:学生学号‘070110’在Student表中不存在,插入取消。

(2)教材实验8思考与练习3定义触发器Ctrig 实现约束:课程的学分不能小于2,如果小于则自动改为2。自行对触发器进行验证。

语句:自己写

结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值