如何解决sql触发器函数-错误“返回多个行”
我已经使用pgadmin创建了一个postgresql数据库。
我需要用于处理新购买的触发器/功能:
purchases_ait
通过添加到purchases
触发;在将购买添加到purchases
表之前检查库存,如果数量不足,则会引发异常;如果没有例外,则从inventory
中减去已售出的数量并将其添加到purchases
中。
Purchases.ait
引发错误消息:more than one row is returned
。请告诉我为什么会这样。我认为这可能与逻辑顺序有关,例如if / then和/或begin / end语句。但是我还没弄清楚。帮助非常感谢!
Purchases_ait:(原始create function
代码,触发代码)
CREATE FUNCTION purchases_ait()
RETURNS TRIGGER
LANGUAGE PLPGSQL
AS
$$
BEGIN
IF NEW.quantity > quantity
FROM public.inventory THEN
RAISE EXCEPTION 'We do not have that much of that item left.';
END IF;
UPDATE public.inventory
SET quantity = quantity - NEW.quantity
WHERE item_id = NEW.item_id;
RETURN NEW;
END;
$$
--trigger code --
CREATE TRIGGER purchases_ait
AFTER INSERT
ON public.purchases
FOR EACH ROW
EXECUTE PROCEDURE purchases_ait()
解决方法
我知道了。两个问题是:
- 将其更改为
BEFORE
而不是AFTER
函数 - 将其更改为
FOR EACH STATEMENT
而不是FOR EACH ROW
应用程序
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。