Re: Actualizar campos que tienen dependencias Foreign Key

From: Juan Carlos Medina Ruiz <jcmedinanix(at)gmail(dot)com>
To: José Fermín Francisco Ferreras <josefermin54(at)hotmail(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 00:30:59
Message-ID: 4b1941651001251630t5c124190r6e2f0f5a8064cd59@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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);
*
*
*

El 25 de enero de 2010 18:45, José Fermín Francisco Ferreras <
josefermin54(at)hotmail(dot)com> escribió:

>
>
> ing. José Fermín Francisco Ferreras
> San Francisco de Macorís, Rep. Dom.
>
>
>
>
> ------------------------------
> Date: Mon, 25 Jan 2010 15:53:42 -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
>
> Nada doctor. te comento que mi campo estado es un boolean al parecer no lo
> esta evaluando. solo evalua hasta la linea del UPDATE si es que le quito
> esta linea IF(OLD.estado = false) THEN entonces si evalua siempre y cuando
> se modifique cualquier campo. Sin embargo yo quiero que se modifique cuando
> el estado de los productos sea falso que podra ser??? ya he intentando de
> varias maneras
>
> El 25 de enero de 2010 12:26, José Fermín Francisco Ferreras <
> josefermin54(at)hotmail(dot)com> escribió:
>
>
>
> ing. José Fermín Francisco Ferreras
> San Francisco de Macorís, Rep. Dom.
>
>
>
>
> ------------------------------
> Date: Mon, 25 Jan 2010 12:04:23 -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
>
> No asume la condicion if (new.campo = false) then ni con new ni con OLD
>
> El 25 de enero de 2010 11:43, José Fermín Francisco Ferreras <
> josefermin54(at)hotmail(dot)com> escribió:
>
>
>
> ing. José Fermín Francisco Ferreras
> San Francisco de Macorís, Rep. Dom.
>
>
>
>
> ------------------------------
> Date: Mon, 25 Jan 2010 09:54: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
> CC: pgsql-es-ayuda(at)postgresql(dot)org
>
>
> ejecute eso que les expongo abajo, pero no me actualiza la tabla grupos al
> parecer la segunda condicion IF(OLD.estado = false) THEN no esta
> asumiendola, mi pregunta es como hago para especificar que cuando en la
> tabla productos el campo estado de uno de ellos pase a false, en las otras
> tablas donde este relacionado ese producto tbm cambien el estado a false.
> Muchas gracias de antemano
>
> El 25 de enero de 2010 09:48, Juan Carlos Medina Ruiz <
> jcmedinanix(at)gmail(dot)com> escribió:
>
> Holas mira estuve haciendo esto porque lo que yo quiero es que se
> actualize la tabla2 cuando en la tabla1 se cambie el estado a false segun
> ese false que esta basado en un boolean que me sirve para eliminar
> logicamente
>
> CREATE FUNCTION producto_eliminar_tri()
> RETURNS trigger
> AS $$
> BEGIN
> IF(TG_OP = 'UPDATE') THEN
> IF(OLD.estado = false) THEN
> UPDATE jmb_grupos SET estado='false' where idproducto=OLD.idproducto;
> END IF;
> END IF;
> RETURN NULL;
> END;
> $$
> Language 'plpgsql';
>
>
> CREATE TRIGGER eliminar_productos_dependencias
> AFTER UPDATE on jmb_productos
> FOR EACH ROW
> EXECUTE PROCEDURE producto_eliminar_tri();
>
>
>
> El 25 de enero de 2010 09:35, José Fermín Francisco Ferreras <
> josefermin54(at)hotmail(dot)com> escribió:
>
>
>
> ing. José Fermín Francisco Ferreras
> San Francisco de Macorís, Rep. Dom.
>
>
>
>
> ------------------------------
> Date: Mon, 25 Jan 2010 08:42:06 -0500
> Subject: [pgsql-es-ayuda] Actualizar campos que tienen dependencias Foreign
> Key
> From: jcmedinanix(at)gmail(dot)com
> To: pgsql-es-ayuda(at)postgresql(dot)org
>
> >saludos una consulta. Quiero borrar de una tabla llamada productos un
> producto(cuando digo >borrar me refiero a actualizar su estado de true a
> false). Pero resulta que este producto tiene >muchas dependencias es llamado
> or otras tablas. Como dar de baja a ese producto haciendo >que todas las
> dependencias pasen de true a false. Atraves de un trigger(maneja potsgres
> >triggers). Porque el update on cascade no me serviria en este caso ya que
> no estoy actualizando >el id si no un campo diferente a este todas las
> tablas manejan campo estado el cual es true si >esta activo y false si esta
> eliminado. Gracias por su colaboracion de antemano.
>
>
>
>
> Podrias probar esto, lo hice medio rapido, si tiene errores tendrias q
> corregirlo, pero creo va por donde quieres.
>
>
>
> CREATE OR REPLACE FUNCTION esquema.cambiar_status()
> RETURNS trigger
> LANGUAGE plpgsql
> AS $function$
> begin
> UPDATE tabla SET
> campo = false
> where codigo=new.codigo;
> return new;
> end;
> $function$
>
>
>
> Prueba esto en tu trigger
>
>
> if (new.campo = false) then
>
> UPDATE facturacion.factura_articulo set
> elcampo = false
> WHERE elcodigo = new.codigo;
> end if;
>
> return new;
>
>
>
>
>
>
>
> ------------------------------
>
>
> Es bastante raro, ve a ver si esto t funciona:
>
> CREATE FUNCTION producto_eliminar_tri()
> RETURNS trigger
> AS $$
> 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;
> $$
> Language 'plpgsql';
>
>
> En caso de q no t funcione manda las tablas involucradas y los triggers q
> tengas hasta el momento para probar.
>
>
>
>
>
>
> Manda las tablas para ver q es lo q esta pasando!!
> ------------------------------
>
>
>
> ------------------------------
>
>
>
> ------------------------------
>

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message José Fermín Francisco Ferreras 2010-01-26 02:51:56 RE: Actualizar campos que tienen dependencias Foreign Key
Previous Message José Fermín Francisco Ferreras 2010-01-25 23:45:46 RE: Actualizar campos que tienen dependencias Foreign Key