2012-05-09 17 views
8

私はPostgresトリガーに助けが必要です。Postgresトリガー機能

私は2列を持つテーブルを持っている:

sold boolean; 
id_shop int; 

アイテムが販売されている、またはその位置で購入いただけれる場合、それが格納されます。

私はさまざまな方法を試してみました

(販売どうかはお店にすることはできません...)私がtrueに「販売」を変更した場合、それはまたNULLid_shopを変更し、トリガーを必要とします、しかし、それは仕事や更新CMD上のエラーを与えていない...あなたは、更新(または挿入)された行の値を変更したい場合は、前にトリガを必要とするすべての

create or replace function pardota_masina_veikals() RETURNS trigger AS $pardota_masina$ 
begin 
    IF NEW.sold=true THEN 
    update masinas 
     SET id_shop=null WHERE id=NEW.id; 
    END IF; 
    RETURN NEW; 
END; 
$pardota_masina$ LANGUAGE plpgsql; 


CREATE TRIGGER pardota_masina_nevar_but_veikala 
    AFTER INSERT OR UPDATE ON masinas FOR EACH ROW EXECUTE PROCEDURE pardota_masina_veikals(); 

答えて

13

まず

Secondl yテーブルを「更新」する必要はありません。新しい値をNEW行に割り当てるだけです。

create or replace function pardota_masina_veikals() 
RETURNS trigger 
AS 
$pardota_masina$ 
begin 
    IF NEW.sold=true THEN 
    NEW.id_shop = NULL; 
END IF; 
RETURN NEW; 
END; 
$pardota_masina$ 
LANGUAGE plpgsql; 

CREATE TRIGGER pardota_masina_nevar_but_veikala 
    BEFORE INSERT OR UPDATE ON masinas 
    FOR EACH ROW EXECUTE PROCEDURE pardota_masina_veikals(); 
+0

ありがとうございます –

関連する問題