| From: | el-PRiNCiPiTo <el-PRiNCiPiTo(at)terra(dot)es> | 
|---|---|
| To: | pgsql-es-ayuda(at)postgresql(dot)org | 
| Subject: | Trigger ON DELETE no me elimina la fila | 
| Date: | 2008-05-22 10:36:58 | 
| Message-ID: | 48354CCA.7090400@terra.es | 
| Views: | Whole Thread | Raw Message | Download mbox | Resend email | 
| Thread: | |
| Lists: | pgsql-es-ayuda | 
	Hola a todos,
he creado unos trigger para que actúen al actualizar, crear y eliminar 
registros de una tabla. He creado uno para cada caso porque prefiero 
tenerlos separados para ver cual me va bien y cual no. El caso es que el 
de las eliminaciones no me funciona. Cuando elimino el registro se 
vuelve a crear. Pongo todos para ver si los que me funcionan os parece 
que están bien o se pueden mejorar y para ver si alguien me dice que 
hago mal en el delete.
	Muchas gracias.
CREATE TRIGGER prioridad_eliminar
   BEFORE DELETE
   ON pedidos
   FOR EACH ROW
   EXECUTE PROCEDURE prioridad_eliminar();
CREATE OR REPLACE FUNCTION prioridad_eliminar()
   RETURNS "trigger" AS
$BODY$BEGIN
IF old.idprioridad <> 8 THEN
	UPDATE prioridad SET ocupada = false WHERE idprioridad = old.idprioridad;
END IF;
return null;
END;$BODY$
   LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION prioridad_eliminar() OWNER TO postgres;
CREATE TRIGGER prioridad_actualizar
   BEFORE UPDATE
   ON pedidos
   FOR EACH ROW
   EXECUTE PROCEDURE prioridad_actualiar();
CREATE OR REPLACE FUNCTION prioridad_actualiar()
   RETURNS "trigger" AS
$BODY$BEGIN
IF old.idprioridad = 8 THEN
	IF new.idprioriodad <> 8 THEN
		UPDATE prioridad SET ocupada = true WHERE idprioridad = new.idprioridad;
	END IF;
ELSE
	IF new.idprioridad <> old.idprioridad THEN
		UPDATE prioridad SET ocupada = true WHERE idprioridad = new.idprioridad;
		UPDATE prioridad SET ocupada = false WHERE idprioridad = old.idprioridad;
	END IF;
END IF;
return new;
END;$BODY$
   LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION prioridad_actualiar() OWNER TO postgres;
CREATE TRIGGER prioridad_nuevo
   BEFORE INSERT
   ON pedidos
   FOR EACH ROW
   EXECUTE PROCEDURE prioridad_nuevo();
CREATE OR REPLACE FUNCTION prioridad_nuevo()
   RETURNS "trigger" AS
$BODY$BEGIN
IF new.idprioridad <> 8 THEN
	UPDATE prioridad SET ocupada = true WHERE idprioridad = new.idprioridad;
END IF;
return new;
END;$BODY$
   LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION prioridad_nuevo() OWNER TO postgres;
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Miguel Rodríguez Penabad | 2008-05-22 10:55:39 | Re: Trigger ON DELETE no me elimina la fila | 
| Previous Message | Julio Cesar Rodriguez Dominguez | 2008-05-22 00:41:44 | Re: operador SIMILAR TO |