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: [email protected]
To: [email protected]
CC: [email protected]

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.



                                          
_________________________________________________________________

Responder a