2012-05-09 80 views
8

我需要Postgres触发器的帮助。Postgres触发器函数

我有2列的表:

sold boolean; 
id_shop int; 

它存储,如果项目被出售,或者前往其位于处。

我需要一个触发,如果我改变“卖”给真实的,那么它也改变了id_shopNULL(它不能在店铺如果卖...)

我尝试不同的方法,但它不工作或给出更新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您不需要“更新”表格,只需将新值分配给新行:

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

谢谢,它工作 –