请在“答题”菜单下选择相应命令,并按照题目要求完成下面的简单应用题,具体要求如下: 注意:下面出现的“考生文件夹”均为%USER% ...
注意:下面出现的“考生文件夹”均为%USER%
在考生文件夹下存有一商场信息管理系统的数据库db_mall,其包含一个记录商品有关信息的商品表tb_commodity,该表包含的字段有商品号(cno)、商品名(cname)、商品类型(ctype)、产地(origin)、生产日期(birth)、价格(price)。
1. 请创建一个名为tri_price的触发器,在插入新的商品记录时,能够根据商品的品名和产地自动设置商品的价格,其具体规则如下:若商品为上海产的电视机,则价格设置为2800,其它商品价格的设置可为缺省。
注意:在考生文件夹中的sj21.txt文件已给出部分程序,但程序不完整,请考生删除下划线,并在下划线处填上适当的内容,使程序补充完整,不能增加或删除行,并按原文件名保存在考生文件夹下,否则没有成绩。
2. 请创建一个名为sp_counter的存储过程,用于计算商品表tb_commodity的商品记录数。
注意:在考生文件夹中的sj22.txt文件已给出部分程序,但程序不完整,请考生删除下划线,并在下划线处填上适当的内容,使程序补充完整,不能增加或删除行,并按原文件名保存在考生文件夹下,否则没有成绩。
参考解析: 1.DELIMITER $$
CREATE TRIGGER tri_price BEFORE INSERT ON tb_commodity FOR EACH ROW
BEGIN
DECLARE tmp1 CHAR(20);
DECLARE tmp2 CHAR(20);
SET tmp1 = NEW.cname;
SET tmp2 =(1);
IF (tmp1= '电视机') && ((2)= '上海') THEN
SET (3) = 2800;
END $$
DELIMITER ;
答案:(1) New.origin (2) tmp2 (3) NEW.price
解析:使用create trigger去创建触发器,本题创建的是前触发器,for each row 是固定语法,其中”DELEMITER $$”语句是将MYSQL的结束符设置为$$,因为MYSQL默认的语句结束符是’;’,这是为了避免存储函数中SQL语句结束符相冲突,就使用了DELEMITER,在定义完毕后再使用”DELEMITER ;”回复默认;declare是声明变量,本题声明了tmp1,和tmp2两个变量,其中tmp1表示新的名称,那么tmp2就表示新的产地, set语句是为变量赋值,因此(1)处填的是NEW.origin,表示的是新的产地,并将新的产地赋予tmp2;本题使用的是if流程控制语句,判断条件是新的名称是”电视机”,产地是”上海”,因此(2)处填的是tmp2;其if语句的执行内容是将其价格设置为2800,因此(3)处填的是NEW.price.
CREATE PROCEDURE sp_counter((1) ROWS INT)
BEGIN
DECLARE cid INT;
DECLARE FOUND BOOLEAN DEFAULT TRUE;
DECLARE cur_cid CURSOR FOR
SELECT cno FROM tb_commodity;
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET FOUND=FALSE;
SET ROWS=0;
OPEN cur_cid;
FETCH cur_cid INTO cid;
WHILE FOUND DO
SET ROWS=ROWS+1;
(2) cur_cid INTO cid;
END WHILE;
(3) cur_cid;
END $$
DELIMITER ;答案:(1) out (2) FETCH (3) close
解析:创建存储过程,其中”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; character指存储函数的特性 ;begin 和end 语句用来限定存储过程体,dec cur_cid CURSOR FOR select是使用declare关键字来声明光标,open语句是打开光标,fetch语句是使用光标,注意MYSQL中光标只能在存储过程和函数中使用,而使用set语句设置光标,因此(2)处填的是FETCH,本题中用到了流程控制中的while语句来实现用于计算商品表tb_commodity的商品记录数,结束时使用END WHILE结束;close语句是关闭光标,使用完光标以后要将光标关闭,因此(3)处填的是close.