2016-10-05 3 views
0

トリガーを作成しようとしていますが、挿入/更新時にlastmodifiedフィールドが更新されます。更新タイムスタンプフィールドのトリガー

CREATE OR REPLACE TRIGGER timestamp_trigger BEFORE INSERT OR UPDATE ON orders 
FOR EACH ROW EXECUTE PROCEDURE timestamp_update; 

と私の手順::私はいくつかのフィールドを更新しようとすると、残念ながら、フィールドが更新されていない

CREATE OR REPLACE FUNCTION timestamp_update() 
RETURNS TRIGGER 
AS 
$$ 
BEGIN 
    UPDATE orders 
    SET lastmodified = getdate() 
    WHERE orderid = new.orderid 
    RETURN new; 
END; 
$$ language plpgsql; 

ここに私のトリガーです。また、行を作成するとき、lastmodifiedフィールドは更新されません。

答えて

1

このようなトリガーでupdateを使用しないでください。無限の再帰的ループにつながる可能性があるためです。 create or replace triggerが間違っている

CREATE OR REPLACE FUNCTION timestamp_update() 
RETURNS TRIGGER 
AS 
$$ 
BEGIN 
    NEW.lastmodified = now(); 
    RETURN new; 
END; 
$$ language plpgsql; 

構文:あなたが挿入/更新された行を変更したい場合は は、ちょうどnewレコードを変更します。

CREATE TRIGGER timestamp_trigger 
BEFORE INSERT OR UPDATE ON orders 
FOR EACH ROW EXECUTE PROCEDURE timestamp_update();