RE: Actualizar campos que tienen dependencias Foreign Key

From: José Fermín Francisco Ferreras <josefermin54(at)hotmail(dot)com>
To: <jcmedinanix(at)gmail(dot)com>
Cc: Lista PostgreSQL <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: Actualizar campos que tienen dependencias Foreign Key
Date: 2010-01-26 02:51:56
Message-ID: COL103-W102179DD6D985616F9EEE9C65E0@phx.gbl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

ing. José Fermín Francisco Ferreras
San Francisco de Macorís, Rep. Dom.

Date: Mon, 25 Jan 2010 19:30:59 -0500
Subject: Re: [pgsql-es-ayuda] Actualizar campos que tienen dependencias Foreign Key
From: jcmedinanix(at)gmail(dot)com
To: josefermin54(at)hotmail(dot)com
CC: pgsql-es-ayuda(at)postgresql(dot)org

Las tablas son las sgtes
CREATE TABLE jmb_productos( idproducto smallint NOT NULL, producto character varying(40) NOT NULL,
descripcion text, idpadre smallint, estado boolean, CONSTRAINT pk_idproducto PRIMARY KEY (idproducto), CONSTRAINT fk_padre_producto FOREIGN KEY (idpadre)
REFERENCES jmb_productos (idproducto) MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE)

CREATE TABLE jmb_grupos
( idgrupo serial NOT NULL, grupo character varying(10) NOT NULL, idciclo smallint, idproducto smallint, idplan smallint, fecha_inicio date NOT NULL,
fecha_fin date, semestre character(1), turno character(1), seccion character(1), estado boolean NOT NULL DEFAULT true, CONSTRAINT pk_idgrupo PRIMARY KEY (idgrupo),
CONSTRAINT "FK_grupos_ciclo" FOREIGN KEY (idciclo) REFERENCES jmb_ciclos (idciclo) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION)WITH (OIDS=FALSE);

Mi único problema fue q no mandaste la tabla ciclo o algo asi, pero, a excepción d esto, estuve probando y a mi no me dio ningun problema el trigger, funcionó bien.
Aquí t mando lo q hice:

-- Function: producto_eliminar_tri()

-- DROP FUNCTION producto_eliminar_tri();

CREATE OR REPLACE FUNCTION producto_eliminar_tri()
RETURNS trigger AS
$BODY$
BEGIN
IF(TG_OP = 'UPDATE') THEN
IF(new.estado = false) THEN
UPDATE jmb_grupos SET estado=false where idproducto=new.idproducto;
END IF;
END IF;
RETURN New;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;
ALTER FUNCTION producto_eliminar_tri() OWNER TO fermin;

Esta es la funcion dentro de la tabla jmb_productos:

-- Table: jmb_productos

-- DROP TABLE jmb_productos;

CREATE TABLE jmb_productos
(
idproducto smallint NOT NULL,
producto character varying(40) NOT NULL,
descripcion text,
idpadre smallint,
estado boolean,
CONSTRAINT pk_idproducto PRIMARY KEY (idproducto),
CONSTRAINT fk_padre_producto FOREIGN KEY (idpadre)
REFERENCES jmb_productos (idproducto) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE
)
WITH (OIDS=FALSE);
ALTER TABLE jmb_productos OWNER TO fermin;

-- Trigger: cambia_status on jmb_productos

-- DROP TRIGGER cambia_status ON jmb_productos;

CREATE TRIGGER cambia_status
AFTER UPDATE
ON jmb_productos
FOR EACH ROW
EXECUTE PROCEDURE producto_eliminar_tri();

Si sigues con dudas o tu caso se resuelve con esto me avisas o mejor lo publicas en la lista para q todos puedan aprender d tu experiencia.


_________________________________________________________________

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Ing. Marcos L. Ortiz Valmaseda 2010-01-26 08:00:48 Sobre PostgreSQL 8.5 y 9.0
Previous Message Juan Carlos Medina Ruiz 2010-01-26 00:30:59 Re: Actualizar campos que tienen dependencias Foreign Key