概述
七、存储过程与触发器
1、要求
1、执行存储过程时,实参数等于存储过程中形参数;实参数少于存储过程中形参数;
2、执行存储过程;通过对表操作触发激发触发器执行并查看结果。
实验环境:MySQL
实验步骤
1. 定义存储过程
① 创建一个能向学生表Student中插入一条记录的存储过程Insert_student,该存储过程需要五个参数,分别用来传递学号、姓名、班级号、性别、出生日期5个值。
插入一条记录的存储过程Insert_student:
②执行存储过程Insert_student,向Student表中插入一个新记录,实参值由用户自己给出。
执行存储过程:
③创建一个向课程表Course中插入一门新课程的存储过程Insert_course,该存储过程需要三个参数,分别用来传递课程号、课程名、学分,但允许参数“学分”的默认值为2,即当执行存储过程Insert_course时,未给第三个参数“学分”提供实参值时,存储过程按默认值2进行运算。
④执行存储过程Insert_course,向课程表Course中插入一门新课程,分两种情况:
第一种情况:提供三个实参值执行存储过程Insert_course,实参值由用户自己给出。
第二种情况:只提供二个实参值执行存储过程Insert_course,即不提供与参数“学分”对应的实参值。
执行完毕后,查询两种执行存储过程的结果并比较差别。
因为mysql存储过程不支持默认参数操作,所以用在SQLSever下存储过程的建立和执行,由于之前没有安装SQLSever不能验证其正确性:
create procedure Insert_course(@Course_no char(5) ,@Course_name char(20),@Course_score int=2)
As
begin
INSERT INTO course
values(@Course_no,@Course_name,@Course_score);
end
exec Insert_course '30007','数学建模';
SELECT *
FROM course;
⑤创建一个名称为query_student的存储过程,该存储过程的功能是从数据表student中根据学号查询某一同学的姓名、班级号、性别、出生日期。
⑥执行存储过程query_student,查询学号为“001101”的姓名、班级号、性别、出生日期。
2. 定义触发器
①创建一个当向学生表Student中插入一条新记录时能自动列出全部同学信息的触发器Display_student。执行存储过程Insert_student,向学生表Student中插入一条新记录,看触发器Display_student是否被执行。
在mysql的trigger和function中不能出现select * from table;或select 字段1, 字段2, 字段3 from table;等等形式的查询,因为其会返回一个结果集;而这在mysql的trigger和function中是不可接受的,但是在存储过程中可以。
②创建一个触发器delete_student,删除学生表Student中记录的同时删除选修表Choice中相应的选课记录。然后,在学生表Student中删除一条记录,查看选修表Choice中相应的选课记录是否被删除。
先给choice表中插入了学号为“991203”学生的选课记录,然后创建触发器、删除student表中“991203”的记录
3.对学生-课程数据库,编写存储过程或触发器完成下列功能
(1)使用游标逐条浏览某个系的学生记录;
参考SQLSever,
参考链接: 参考
(2)统计任意一门课程的成绩分布情况,即按照各分数段统计人数;
先建立rank表,第一列phase为分数段,第二列number为人数。
再编写存储过程。
执行存储过程。
(3)统计每个学生的平均成绩及排名;
(4)当修改学生表中学生学号时,保证选课表中的学号同时更新。
操作技巧与注意事项:
1. Create Procedure语句和Create Trigger语句必须是批处理的第一个语句。
2. 数据库所有者具有默认的创建存储过程的权限,它可把该权限传递给其他的用户。
3. 表的所有者具有创建触发器的缺省权限,他不能把该权限传递给其他的用户。
4. 存储过程和触发器作为数据库的对象,其命名必须符合命名规则。
5. 只能在当前数据库中创建属于当前数据库的存储过程和触发器。
6. 一个触发器只能对应一个表。
7. 存储过程与BAT文件又有很大的差别,存储过程已经进行了预编译,而BAT文件仅仅是将一些命令集合在一起。
8. 在对象资源管理器中,不能直接删除触发器。删除触发器只能使用DROP TRIGGER语句。
最后
以上就是贪玩黑裤为你收集整理的数据库原理_ 存储过程与触发器的全部内容,希望文章能够帮你解决数据库原理_ 存储过程与触发器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复