Sql 当商品售出时改变库存表的触发器

Sql 当商品售出时改变库存表的触发器,sql,postgresql,triggers,Sql,Postgresql,Triggers,当商品售出时,触发器更改库存表的语法是否正确 create trigger tr_stockquant on tbl_ticket for insert, update, delete as $$ begin update s set stockQty = s.stockQty - isnull(i.Qty,0) + isnull(d.Qty,0) from tbl_stock s left join inserted i on s.itemID = i.itemID left join del

当商品售出时,触发器更改库存表的语法是否正确

create trigger tr_stockquant
on tbl_ticket for insert, update, delete as $$
begin
update s set stockQty = s.stockQty - isnull(i.Qty,0) + isnull(d.Qty,0)
from tbl_stock s
left join inserted i
on s.itemID = i.itemID
left join deleted d on itemID = s.itemID
end;
$$ language plpgsql;

首先需要创建一个适当的函数,然后遵循语句的语法和语义

因此,首先创建一个函数:

CREATE FUNCTION alter_stock_table() RETURNS TRIGGER AS $$
    BEGIN
        IF tg_op = 'INSERT' THEN
            ...
        ELSIF tg_op = 'UPDATE' THEN
            ...
        ELSIF tg_op = 'DELETE' THEN
            ...
        ENDIF
$$ LANGUAGE PLPGSQL;
然后你可以创建一个触发器:

CREATE TRIGGER alter_stock_table_trigger
    AFTER INSERT, UPDATE, DELETE ON tbl_ticket
    FOR EACH ROW
    EXECUTE PROCEDURE alter_stock_table();
谷歌将帮助你找到更多关于如何定义你的函数的例子。
例如,给出一个简短的介绍。

问题通常有一个
。我理解你的问题,但我不能理解你的代码。请转换为代码块并添加适当的换行符(通过在每个换行符后添加四个空格使其成为代码块)。此外,您应该测试它。它做了你想让它做的事吗?如果没有,那么你可以回来。告诉我们您希望它做什么以及它实际做什么,我们可能会更好地帮助您。当运行psql时,我在尝试更新库存数量表时,在第行附近出现了错误语法。当从票证表中出售商品时,我正在尝试更新库存数量表