问答题
2.某工厂的仓库管理数据库中有两个关系模式:
仓库(仓库号,面积,负责人,电话)
原材料(编号,名称,数量,储备量,仓库号)
要求一种原材料只能存放在同一仓库中。
问答题
写出“查询存放原材料数量最多的仓库号”的SQL语句。
【正确答案】
【答案解析】SELECT仓库号 FROM 原材料 GROUP BY 仓库号 HAVING SUM (数量)>=ALL(SELECT SUM(数量) FROM 原材料 GROUP BY 仓库号);
问答题
(2)下面是一个创建视图的语句:
CREATE VIEW raw_in_wh01 AS
SELECT *
FROM 原材料
WHERE 仓库号='01';
试写出“01号仓库所存储的原材料信息只能由管理员李劲松来维护,而采购员李强能够查询所有原材料的库存信息”的授权语句。
【正确答案】
【答案解析】可以写两个授权语句: GRANT INSERT, DELETE, UPDATE ON raws_in_wh01 TO 李劲松; GRANT SELECT ON 原材料TO 李强;
问答题
(3)仓库管理数据库的订购计划关系模式为:订购计划(原材料编号,订购数量)。采用下面的触发器程序可以实现“当仓库中的任一原材料的数量小于其储备量时,向订购计划表中插入该原材料的订购记录,其订购数量为储备量的3倍”的功能。请将该程序的空缺部分补充完成。
CREATE TRIGGER ins_order_trigger AFTER{{U}} (1) {{/U}}ON 原材料
REFERENCING NEW ROW AS nrow
FOR EACH ROW
WHEN nrow.数量<nrow.储备量
INSERT INTO 订购计划<VALUES
({{U}} (m) {{/U}},{{U}} (n) {{/U}});
【正确答案】
【答案解析】UPDATE, INSERT (m)nrow.编号 (n)nrow.储备量*3
问答题
(4)如果一种原材料可以在多个仓库存放,则(3)中的触发器程序存在什么问题,如何修改?
【正确答案】
【答案解析】存在的问题是:触发器程序判定某一原材料“数量”是否小于其存储量时,是按照当前记录的“数量”来判定的,当一种原材料存储在多个仓库时,这样判定是错误的,应根据该原材料在各仓库的存储总量判定。 应将触发器程序的WHEN子句的条件修改为: WHEN nrow.储备量>(SELECT SUM(数量) FROM 原材料 WHERE 编号=(SELECT 编号 FROM nrow));