请在“答题”菜单下选择相应命令,并按照题目要求完成下面的操作,具体要求如下: 注意:下面出现的“考生文件夹”均为%USER% &nb...
注意:下面出现的“考生文件夹”均为%USER%
在考生文件下有学生社团数据库db_associationt中有学生表tb_student、社团表tb_group和学生参加社团表tb_gs。请按要求完成以下操作。
1. 设计一个名称为sp_list的存储过程,根据给定的社团名称,显示参加该社团的学生姓名、专业,并写出调用存储过程的语句。
注意:在考生文件夹中的sj21.txt文件已给出部分程序,但程序不完整,请考生删除下划线,并在下划线处填上适当的内容,使程序补充完整,不能增加或删除行,并按原文件名保存在考生文件夹下,否则没有成绩。
2. 设计一个名称为ev_group的事件,将没有参加任何学生社团的学生名单保存到一个文件中,每个月执行一次。
注意:在考生文件夹中的sj22.txt文件已给出部分程序,但程序不完整,请考生删除下划线,并在下划线处填上适当的内容,使程序补充完整,不能增加或删除行,并按原文件名保存在考生文件夹下,否则没有成绩。
参考解析: 1.DELIMITER $$
CREATE PROCEDURE sp_list((1)s CHAR(20))
BEGIN
IF s (2)' ' THEN
SELECT sname,smajor FROM tb_student s,tb_gs gs, tb_group g WHERE s.sno=gs.sno AND gs.gno=g.gno AND gname=(3);
(4);
END $$
DELIMITER ;
(5) sp_list('话剧社');
答案:(1)IN (2) != (3) s (4) END IF (5)CALL
解析:创建存储过程,其中”DELEMITER $$”语句是将MYSQL的结束符设置为$$,因为MYSQL默认的语句结束符是’;’,这是为了避免存储函数中SQL语句结束符相冲突,就使用了DELEMITER,在定义完毕后再使用”DELEMITER ;”回复默认。创建存储过程的是create procedure sp_name([proc_paramter])
[characteristics….]routine_body
sp_name表示存储过程的名称;proc_parameter为存储过程的参数列表,有如下形式:[in|out|inout] param_name type,其中 in表示输入,out表示输出,inout既表示输出也可以输入,故(1)处填的是IN; characteristics指存储过程的特性 ;begin 和end 语句用来限定存储过程体,本题使用了if流程控制语句,(2)填的是”!=”进行判断s是否为空,如果(2)处的判断为真是,按照给定的社团名称s进行查询,故(3)处填的是s,(4)是IF流程的结束语句,故(4)处填的是IF,(5)处是调用存储过程的语句,使用CALL语句进行调用,故(5)处填的是CALL。
2.DELIMITER $$
CREATE EVENT ev_group ON(1) EVERY 1 MONTH
(2) CURDATE()+INTERVAL 1 MONTH
DO
BEGIN
SELECT sno,sname FROM tb_student WHERE sno (3) ( SELECT (4) FROM tb_gs ) (5) OUTFILE 'c:/tmp.txt' FIELDS TERMINATED BY ',';
END $$
DELIMITER ;
答案:(1) SCHEDULE (2) STARTS (3) not in (4) sno (5) INTO
解析:创建事情的语法为:
CREATE EVENT
[IF NOT EXISTS ] //如果不存在则创建
event_name
ON SCHEDULE schedle
DO sql_statement
其中event_name为事件名称,on schedule有两种设定计划任务的方式,因此(1)处填的是SCHEDULE:1.单次计划任务 AT 时戳 2.重复的计划任务 every 时间(单位)的数量 时间单位 [STARTS 时戳][ENDS 时戳],而(2)处填的是STARTS,DO中执行的sql语句中,(3)处填的是not in,(4)中填的是sno,(5)处填的是INTO为固定的用法。