0

updateステートメントをトリガーに入れようとして、過去1時間以上遊んでいます。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();

上記のスクリプトは実行されますが、フランスを国列に追加しません。この関数は、Web で見つけたステートメントから採用されました。

ポストグル 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 に答える