【发布时间】:2019-08-22 20:09:47
【问题描述】:
所以我有这个库存数据库
https://dbfiddle.uk/?rdbms=postgres_10&fiddle=19946dda5ca1ab86e9a8cf63717e65fa
哪个或多或少地添加了来自各种来源的库存 (inventory_type) 并将具有 products(id) 外键引用。总和将据此计算。
谓词应该是
如果股票价值是负数,那么它不应该大于股票本身。
您建议我如何实现它?
这是我尝试过的。
检查不允许子查询,所以我选择了触发器。
CREATE FUNCTION public.check_stock_quantity()
RETURNS trigger
LANGUAGE 'plpgsql'
COST 100
VOLATILE NOT LEAKPROOF
AS $BODY$
BEGIN
IF NEW.stock < 0 THEN
IF ((SELECT SUM(stock) FROM inventory WHERE id= NEW.id) - NEW.stock ) < 0 THEN
RAISE EXCEPTION 'Not enough stocks. Invalid stock entry';
END IF;
END IF;
RETURN NEW;
END;
$BODY$;
然后我应用了它
stock_trigger BEFORE INSERT OR UPDATE ON inventory FOR EACH ROW EXECUTE PROCEDURE check_stock_quantity()
但它拒绝工作。
有没有更好的方法来处理这样的库存?如果不是,那么我的触发器有什么问题?
【问题讨论】:
-
在什么情况下不起作用?具体一点。
-
编辑 :- 成功了
标签: sql postgresql triggers aggregate-functions