我需要创建一个触发器。
当我在销售表中获得新元组时,
其数量应在库存表中减少1
但是,此触发器不起作用
请帮忙!
谢谢。
CREATE TRIGGER stock_update
AFTER INSERT ON sales
UPDATE stocks
SET st.quantity = st.quantity - 1
WHERE NEW.s_b_id = st_id;
CREATE TABLE stocks (
st_id int references books(b_id),
st_price money NOT NULL,
st_quantity int NOT NULL
);
CREATE TABLE sales (
order_id serial PRIMARY KEY,
s_b_id int NOT NULL references books(b_id),
s_a_id int NOT NULL references accounts(a_id),
s_price money NOT NULL,
s_date date NOT NULL
);
答案 0 :(得分:3)
以这种方式试试
CREATE OR REPLACE FUNCTION stock_update()
RETURNS TRIGGER
AS
$stock_update$
BEGIN
UPDATE stocks
SET st_quantity = st_quantity - 1
WHERE st_id = NEW.s_b_id;
RETURN NEW;
END;
$stock_update$
LANGUAGE plpgsql;
CREATE TRIGGER stock_update_trigger
AFTER INSERT ON sales
FOR EACH ROW
EXECUTE PROCEDURE stock_update();
我们试一试:
# insert into stocks values (1, 20, 100); INSERT 0 1 # insert into sales values(1, 1, 1, 20.00, '2013-12-10'); INSERT 0 1 # select * from stocks; st_id | st_price | st_quantity -------+----------+------------- 1 | $20.00 | 99 (1 row)
这是 SQLFiddle 演示
更新以删除触发器
DROP TRIGGER stock_update_trigger ON sales;