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 19:06:21
Message-ID: COL103-W251F8F514FE118A7A95C43C65E0@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: Tue, 26 Jan 2010 11:42:54 -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

doc ya halle la solución mil Gracias solo cambie el modo de evaluar a isnull porque el postgres en el boolean no cambia a false si no que establece el campo en blanco solo evalue de esa manera y todo quedo Ok Mil gracias por su tiempo

2010/1/26 José Fermín Francisco Ferreras <josefermin54(at)hotmail(dot)com>

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

Date: Tue, 26 Jan 2010 09:33:31 -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; pgsql-es-ayuda(at)postgresql(dot)org

Ante todo gracias por tu tiempo, pero te comento que es algo raro sigue sin salirme el trigger. No actualiza la tabla grupos por mas que modifique el estado del producto.

2010/1/25 José Fermín Francisco Ferreras <josefermin54(at)hotmail(dot)com>

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.



creaste esta función dentro de la tabla de jmb_productos??

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

Mi hermano, me alegro q hayas resuelto tu problema,pero no estoy deacuerdo con eso q dices de q Postgresql no pone los campos en false, verifica con psql, para q veas q si los pone false.


_________________________________________________________________

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Terry Yapt 2010-01-26 21:59:28 Re: Que puede envidiar postgresql a oracle ?
Previous Message Alvaro Herrera 2010-01-26 17:29:39 Re: Sobre PostgreSQL 8.5 y 9.0