请在“答题”菜单下选择相应命令,并按照题目要求完成下面的操作,具体要求如下: 注意:下面出现的“考生文件夹”均为%USER% 在数据库newte...
注意:下面出现的“考生文件夹”均为%USER% 在数据库newtest中,现有goods表和orders表,如下所示:
goods(id, name, num) (说明:商品编号,商品名称,库存数量)
orders(oid, gid, quantity) (说明:订单编号,商品编号,购买数量)
1. 请创建一个存储函数fn_orderdetail,要求根据指定的商品名称和订单编号,查找并返回相应订单上商品的数量。
注意:在考生文件夹中的sj21.txt文件已给出部分程序,但程序不完整,请考生删除下划线,并在下划线处填上适当的内容,使程序补充完整,不能增加或删除行,并按原文件名保存在考生文件夹下,否则没有成绩。
2. 请创建一个存储过程sp_order,要求向表orders插入记录时,根据插入记录的商品编号和购买数量更新表goods中的库存数量num。
注意:在考生文件夹中的sj22.txt文件已给出部分程序,但程序不完整,请考生删除下划线,并在下划线处填上适当的内容,使程序补充完整,不能增加或删除行,并按原文件名保存在考生文件夹下,否则没有成绩。
参考解析: 1.【答案】
DELIMITER $
CREATE FUNCTION (1) (NAME VARCHAR(20), oid INT)
(2)RETURNS INT
DETERMINISTIC
BEGIN
DECLARE tmp INT;
SELECT quantity INTO tmp FROM goods, orders
WHERE goods.id=orders. (3) AND goods.name= NAME AND orders.oid =oid;
RETURN tmp;
END$
DELIMITER ;
答案:(1) fn_orderdetail (2)RETURNS (3)oid
【解题思路】根据创建存储函数的语法结构填空
1、使用关键字 创建 FUNCTION(函数)故(1)处填写fn_orderdetail;2、返回值是INT类型所以RETURNS INT,故(2)处填写RETURNS;3、由题可知通过商品名称name和订单编号oid,查找并返回相应订单上商品的数量tmp。其中name和oid是函数形参,传入的值,tmp是函数中声明的变量用来代替 goods表的quantity字段,根据这个逻辑可知上面(3)空应填写传入的订单编号oid。
2.【答案】
DELIMITER $
CREATE PROCEDURE sp_order(in gid int,(1) quantity int)
BEGIN
declare remain int;
insert into orders(gid,quantity) values (gid, quantity);
update (2) set num= num-1 where id =gid;
select num into remain from goods where id =(3);
select remain;
END $
DELIMITER ;
答案:(1) in (2)goods (3)gid
【解题思路】根据创建存储过程的语法结构填空,
1、由题可知根据插入记录的商品编号gid和购买数量quantity 来更改goods表中的库存数量num,通过这句话可知,gid和quantity都是in 变量 类型的结构,故(1)处填写in;
2、需要更改goods表,所以用update goods set语句,故(2)处填写goods;
3、通过商品编号来查找库存数量 所以select ..where id=gid,故(3)处填写gid;