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: | Raw Message | Whole Thread | 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 |