在Postgres中触发以使用其他表中的最小值更新主表中的列

时间:2015-09-30 22:21:12

标签: database postgresql plpgsql

使用PostgreSQL 9.3.6

我有三张桌子

CREATE TABLE main (sno int, ID varchar, A int);
CREATE TABLE aux_1 (ID varchar, b int);
CREATE TABLE aux_2 (ID varchar, c int);

目标:确保主表A列中的值= LEAST(aux_1表的列b中的值与aux_2表的列c中的值)。图形插图在这里 - Link

我的尝试:我创建了以下函数min_compare()来完成主表的自动更新

DECLARE
id_temp VARCHAR;
b_temp INTEGER;
c_temp INTEGER;
min_value INTEGER;

BEGIN
FOR r IN 1 .. 100
LOOP
SELECT INTO id_temp main."ID" FROM main WHERE sno = r;
SELECT INTO b_temp aux_1.b FROM aux_1 WHERE aux_1."ID" = id_temp;
SELECT INTO c_temp aux_2.c FROM aux_2 WHERE aux_2."ID" = id_temp;

IF b_temp > c_temp THEN min_price := c_temp;
ELSE min_price := b_temp;
RETURN min_price;
END IF;
UPDATE main SET "a" = min_price WHERE "ID" = id_temp;
END LOOP;
END;

触发表aux_1

CREATE TRIGGER min_value AFTER UPDATE ON aux_1 FOR EACH ROW EXECUTE PROCEDURE min_compare();

触发表aux_2

CREATE TRIGGER min_value AFTER UPDATE ON aux_2 FOR EACH ROW EXECUTE PROCEDURE min_compare();

问题:当我更新表aux_1的表b和/或表aux_2的列c时,主表A列中的相应值不会更新。

我完全是postgresql和plpgsql的新手。请原谅我,如果这是一个完全愚蠢的问题,但我试图搜索到达这个阶段,现在我完全卡住了。请帮忙。

0 个答案:

没有答案