【发布时间】:2018-12-17 00:30:56
【问题描述】:
我正在 Postgresql 中编写一个触发器,以根据 咨询表上的插入动态更新 收入表的特定列的内容。 [edit]这是我的表格的样子
SELECT * FROM psy_revenues;
id | owner_id | January | February | March | April | etc | etc
---+----------+---------+----------+-------+-------+-----+----
2 | 1 |0 | 0 | 0 | 0 | |
SELECT * FROM psy_consultations;
id | first_name | last_name | date | payed | owner_id
---+------------+-----------+-----------------------------+-------+---------
3 | Gérard | Bouchard |2018-12-05 04:49:26.064397+01| 80 |1
4 | Pasti | Lami |2018-12-05 23:23:52.454849+01| 60 |2
我正在寻找一种简单的解决方案,只设置与 consultations 上添加的 NEW 行的时间戳相对应的列(月份)。这很容易根据 psql 中的时间戳获取月份名称:to_char(2018-12-05 04:42:11.66867+01, 'Month') ==> December
[问题] 但是,我不知道如何使用它来指示psql 应该更新哪一列。这是我正在寻找的内容的一般概念。主要问题是我使用 value 来表示 field(参见 SET 行)。是否有解决方法,以便我可以直接选择相关字段? (我尝试了几件事,但都不是很成功)
CREATE OR REPLACE FUNCTION update_revenues()
RETURNS trigger AS
$BODY$
BEGIN
UPDATE psy_revenues
SET to_char(NEW.date, 'Month') = (
SELECT SUM(payed)
FROM psy_consultations
WHERE (
owner_id = NEW.owner_id
AND to_char(date, 'Month')=to_char(NEW.date, 'Month')
)
);
RETURN NEW;
END;
$BODY$ LANGUAGE plpgsql;
CREATE TRIGGER update_revenues
AFTER INSERT
ON psy_consultations
FOR EACH ROW
EXECUTE PROCEDURE update_revenues();
【问题讨论】:
标签: sql postgresql plpgsql database-trigger