PostgreSQL:触发更新
PostgreSQL: Trigger update
我有 t_a
和 t_b
table,当 F
到 T
的统计数据发生变化时,我需要 tablet_b
,t_a
中的stock
从t_b
中的amount
减少.
t_a table
--------------
| id | stock |
--------------
| 1 | 20 |
| 2 | 40 |
--------------
t_b table
-----------------------
| id | amount | stats |
-----------------------
| 1 | 5 | F |
| 2 | 7 | T |
-----------------------
这是我的查询:
CREATE OR REPLACE FUNCTION public.fn_acc_a()
RETURNS trigger AS
$BODY$DECLARE
BEGIN
IF tg_op = 'UPDATE' THEN
UPDATE public.t_a SET stock = stock-NEW.amount
WHERE id = NEW.id;
END IF;
RETURN new;
END$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
------------------------------------------------------
CREATE TRIGGER trg_acc_a
BEFORE UPDATE
ON public.t_b
FOR EACH ROW
WHEN (pg_trigger_depth() = 0)
EXECUTE PROCEDURE public.fn_acc_a();
我想添加一个条件 when stats = 'T'
on trigger
它解决了,我只是在函数中添加 if 条件
IF tg_op = 'UPDATE' THEN
IF NEW.STATUS ='T' THEN
UPDATE public.t_a SET stock = stock-NEW.amount
WHERE id = NEW.id;
END IF;
END IF;
我有 t_a
和 t_b
table,当 F
到 T
的统计数据发生变化时,我需要 tablet_b
,t_a
中的stock
从t_b
中的amount
减少.
t_a table
--------------
| id | stock |
--------------
| 1 | 20 |
| 2 | 40 |
--------------
t_b table
-----------------------
| id | amount | stats |
-----------------------
| 1 | 5 | F |
| 2 | 7 | T |
-----------------------
这是我的查询:
CREATE OR REPLACE FUNCTION public.fn_acc_a()
RETURNS trigger AS
$BODY$DECLARE
BEGIN
IF tg_op = 'UPDATE' THEN
UPDATE public.t_a SET stock = stock-NEW.amount
WHERE id = NEW.id;
END IF;
RETURN new;
END$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
------------------------------------------------------
CREATE TRIGGER trg_acc_a
BEFORE UPDATE
ON public.t_b
FOR EACH ROW
WHEN (pg_trigger_depth() = 0)
EXECUTE PROCEDURE public.fn_acc_a();
我想添加一个条件 when stats = 'T'
on trigger
它解决了,我只是在函数中添加 if 条件
IF tg_op = 'UPDATE' THEN
IF NEW.STATUS ='T' THEN
UPDATE public.t_a SET stock = stock-NEW.amount
WHERE id = NEW.id;
END IF;
END IF;