请在“答题”菜单下选择相应命令,并按照题目要求完成下面的操作,具体要求如下: 注意:下面出现的“考生文件夹”均为%USER% &nb...
注意:下面出现的“考生文件夹”均为%USER%
1. 请创建一个名为tri_type的触发器,在插入新的借阅记录时,如果借出日期为空,就把它设置为当前日期。
注意:在考生文件夹中的sj21.txt文件已给出部分程序,但程序不完整,请考生删除下划线,并在下划线处填上适当的内容,使程序补充完整,不能增加或删除行,并按原文件名保存在考生文件夹下,否则没有成绩。
2. 请创建一个名为sp_counter的存储过程,用于计算借阅表tb_book的图书借阅记录数,并返回该记录数。
注意:在考生文件夹中的sj22.txt文件已给出部分程序,但程序不完整,请考生删除下划线,并在下划线处填上适当的内容,使程序补充完整,不能增加或删除行,并按原文件名保存在考生文件夹下,否则没有成绩。
参考解析: 1.DELIMITER $$
CREATE TRIGGER tri_date BEFORE (1) ON tb_book FOR EACH ROW
BEGIN
IF(ISNULL((2))) THEN
(3)NEW.ldate=curdate();
END IF;
END $$
DELIMITER ;
答案:(1)insert (2) NEW.ldate (3) SET
解析:使用create trigger去创建触发器,本题创建的是前触发器,在进行insert前触发触发器,因此(1)处填写的是insert,for each row 是固定语法;其中”DELEMITER $$”语句是将MYSQL的结束符设置为$$,因为MYSQL默认的语句结束符是’;’,这是为了避免触发器中SQL语句结束符相冲突,就使用了DELEMITER,在定义完毕后再使用”DELEMITER ;”恢复默认,本题使用的是if流程控制语句,首先判断NEW.ldate是否为空,因此(2)处填的是NEW.ldate,如果为空为其赋当前时间值,因此(3)处填写的是SET.
2.DELIMITER $$
CREATE PROCEDURE sp_counter((1) rows INT)
BEGIN
DECLARE bid INT;
DECLARE FOUND BOOLEAN DEFAULT TRUE;
DECLARE cur_bid CURSOR FOR
SELECT bno FROM tb_book;
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET FOUND=FALSE;
SET rows =(2);
OPEN cur_bid;
FETCH cur_bid INTO bid;
WHILE FOUND DO
SET rows =rows +1;
(3) cur_bid INTO bid;
END WHILE;
CLOSE cur_bid;
END $$
DELIMITER ;
答案:(1)out (2)0 (3)FETCH
解析:创建存储过程,其中”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)处填写的是out;returns type 表示函数返回数据的类型;character指存储函数的特性 ;begin 和end 语句用来限定存储过程体,dec cur_cid CURSOR FOR select是使用declare关键字来声明光标,open语句是打开光标,fetch语句是使用光标,因此(3)处填写的是FETCH,close语句是关闭光标,注意MYSQL中光标只能在存储过程和函数中使用,本题使用了while流程控制语句,(2)是使rows初始化位0,因此(2)处填的是0。