使用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的新手。请原谅我,如果这是一个完全愚蠢的问题,但我试图搜索到达这个阶段,现在我完全卡住了。请帮忙。