2012-05-09 14 views
8

Necesito ayuda en los activadores de Postgres.Función de disparo de Postgres

tengo tabla con 2 columnas:

sold boolean; 
id_shop int; 

Almacena si el artículo se vende, o en la que su tienda de localiza en.

Necesito un gatillo, si cambio el "vendido" a verdad, entonces también cambia la id_shop a NULL (No puede ser en la tienda si se venden ...)

He intentado diferentes maneras, pero no funciona o da un error en la actualización 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(); 

Respuesta

13

en primer lugar es necesario un disparador antes si desea cambiar un valor de la fila que se está actualizada (o insertado)

Secondl y no necesita "actualizar" la tabla, simplemente asigne el nuevo valor a la NUEVA fila:

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

Gracias, funcionó –

Cuestiones relacionadas