【答案解析】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));