0

在过去的一个小时或更长时间里,我一直在尝试将更新语句放入触发器中。我理解 UPDATE 语句的概念,下面的工作很好

UPDATE cars SET country = 'France';

我想要的是把它放到一个触发器中,这样当汽车表更新时,国家列就会自动更新为法国。

我已经尝试过调整我在互联网上发现的函数和触发器,但我显然使语句错误,因为它们要么不执行,要么执行但在新记录时不更新国家/地区字段被添加。

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();

上述脚本执行但不将法国添加到国家列。该函数改编自我在网上找到的声明。

Postgres 9.1。

我知道答案会很简单!

4

1 回答 1

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;
于 2013-03-11T15:43:31.277 回答