Trigger ON DELETE no me elimina la fila

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;

Responses

Browse pgsql-es-ayuda by date

  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