我无法创建触发器!请为我纠正

时间:2013-12-10 04:18:27

标签: sql postgresql triggers

我需要创建一个触发器。

当我在销售表中获得新元组时,
其数量应在库存表中减少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
);

1 个答案:

答案 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;