问题描述
我有三张桌子:
Merchandise
(ID_MERCH char(20) PK,ITEM_NAME varchar(225),ID_ARTIST char(20),STOCK int,PRICE float
);
Merchandise_Sales
(ID_MERCH char(20),QUANTITY_SOLD int,ID_disT char(10)
);
Merch_Stock
(ID_MERCH char(20),TOTAL_SOLD decimal(32,0),CURRENT_STOCK decimal(33,0)
);
商品是关于商品的信息,包括其价格和整体库存。
Merchandise_Sales 就像记录不同分销商的订单。
我们用一个函数创建了 Merchandise_Stock 并加入,但现在意识到我们可能需要将这个函数保存为一个过程。
Merch_Stock 的代码是:
CREATE TABLE MERCH_STOCK AS (
SELECT disTINCT MS.ID_MERCH,M.STOCK,sum(QUANTITY_SOLD) AS TOTAL_SOLD,M.STOCK-(sum(QUANTITY_SOLD)) AS CURRENT_STOCK
FROM MERCHANdisE_SALES MS
INNER JOIN MERCHANdisE M ON M.ID_MERCH=MS.ID_MERCH
GROUP BY ID_MERCH
);
1a) 通过使用我们制作表格的函数/代码,从商品销售更新影响 merch_stock 表格?
1b) 在 merch_stock 上,如果 total_sold > stock 然后回滚交易或在插入前设置触发器?
- 链接商品表和 merch_stock 表上的库存的程序?
目前我不确定这些事情是否可行,所以如果有人能提供帮助那就太好了!谢谢!
解决方法
做这样的事情:
delimiter |
CREATE TRIGGER before_insert_in_Merchandise_Sales BEFORE INSERT ON Merchandise_Sales FOR EACH ROW
BEGIN
DECLARE v_total_stock int default 0;
DECLARE v_total_sold int default 0;
-- get total quantity of marchandise
SELECT sum(STOCK) into v_total_stock from Merchandise where ID_MERCH =new.ID_MERCH ;
SELECT sum(QUANTITY_SOLD )into v_total_solde from Merchandise_Sales where ID_MERCH =new.ID_MERCH ;
IF(v_total_solde + new.QUANTITY_SOLD > v_total_stock) THEN
-- rollback
rollback;
END IF;
END|
DELIMITER |