2012-05-09 9 views
8

Ho bisogno di aiuto nei trigger Postgres.Funzione trigger Postgres

devo tabella con 2 colonne:

sold boolean; 
id_shop int; 

Memorizza se oggetto è in vendita, o in cui la sua negozio situato a.

Ho bisogno di un grilletto, se cambio la "venduto" a true, allora cambia anche il id_shop-NULL (Non può essere in negozio, se venduto ...)

ho provato diversi modi, ma non funziona o dà un errore sul cmd aggiornamento ...

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

risposta

13

prima di tutto è necessario un prima grilletto se si vuole cambiare il valore della riga in fase di aggiornamento (o inserito)

Secondl Non è necessario "aggiornare" la tabella, basta assegnare il nuovo valore alla riga 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

Grazie, ha funzionato –

Problemi correlati