我在最后一小时或更长时间内一直在玩,试图将更新语句放入触发器中。我理解UPDATE语句的概念,下面的工作正常
UPDATE cars SET country = 'France';
我想要的是将其置于触发器中,以便在更新汽车表时,列国家/地区将自动更新为法国。
我已经玩过调整我在interweb上发现的函数和触发器,但是我显然错误地声明了它们不执行或执行但不更新country字段时添加了一条新记录。
CREATE FUNCTION update_country () RETURNS TRIGGER AS $$
BEGIN
IF (TG_OP = 'UPDATE') THEN
UPDATE cars SET country = 'France' WHERE id = New.id;
END IF;
RETURN NULL;
END;
$$ LANGUAGE plpgsql; --The trigger used to update a table.
CREATE TRIGGER update_country_col BEFORE UPDATE ON cars FOR EACH ROW EXECUTE PROCEDURE update_country();
上述脚本会执行,但不会将France添加到country列。 该功能改编自我在网上发现的声明。
Postgres 9.1。
我知道答案会很简单!
答案 0 :(得分:3)
在更新触发器中,您应修改NEW
条记录。
此外,您可能需要从过程中返回NEW
条记录。
因此,您应该使用以下程序而不是您的程序:
CREATE FUNCTION update_country () RETURNS TRIGGER AS $$
BEGIN
IF (TG_OP = 'UPDATE') THEN
NEW.country = 'France';
END IF;
RETURN NEW;
END; $$ LANGUAGE plpgsql;