Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/12/2009, 14:40
kerenchx
 
Fecha de Ingreso: diciembre-2009
Mensajes: 2
Antigüedad: 14 años, 4 meses
Puntos: 0
Problema DELETE dentro de un trigger

Hola a todos los del foro, este es mi post y espero que me puedan ayudar.

tengo el sgte trigger:

Código:
-- Function: actualizacartones()
-- DROP FUNCTION actualizacartones();
CREATE OR REPLACE FUNCTION actualizacartones()
  RETURNS trigger AS
$BODY$
DECLARE
   reg RECORD; 
   descuento real; 
BEGIN
    DELETE FROM carton where fecha>=(select date(now()));
   FOR reg IN SELECT * FROM cartonesupdate LOOP
       --Insertando los manifiestos
       IF((SELECT count(cod_man) FROM manifiesto WHERE cod_man=reg.cod_man)=0) THEN
           INSERT INTO manifiesto(cod_man,nro_ruta,fecha) VALUES (reg.cod_man,reg.ruta,reg.fecha);
       END IF;
       --Insertando los cartones 
       IF ((SELECT count(cod_car) FROM carton WHERE cod_car=reg.cod_car)=0) THEN
           INSERT INTO carton (cod_car, tipo_pickeo, estado, unidades, cd_location, peso_t, vol_t, peso_u, vol_u, fecha, sku, cod_man) VALUES (reg.cod_car, reg.tipo_pickeo, reg.estado, reg.unidades, reg.cd_location, reg.peso_t, reg.vol_t, reg.peso_u, reg.vol_u, reg.fecha, reg.sku, reg.cod_man);
       ELSE
           UPDATE carton SET estado=reg.estado WHERE cod_car=reg.cod_car;
       END IF;              
   END LOOP;    
   -- Descontar carga de trabajo al equipo
   IF new.hora>'23:15:00' THEN
      FOR reg IN SELECT cod_eq, hr_asig FROM equipo LOOP
          descuento:=(SELECT sum(tiempo) FROM carton WHERE cod_eq=reg.cod_eq and estado>='10');
          UPDATE equipo set hr_asig=(reg.hr_asig-descuento) WHERE cod_eq=reg.cod_eq;         
      END LOOP; 
   END IF; 
RETURN NEW;
END;
$BODY$
  LANGUAGE 'plpgsql'

Código:
CREATE TRIGGER improtar
AFTER INSERT OR UPDATE
ON actualizar
FOR EACH ROW
EXECUTE PROCEDURE actualizacartones();
Lo primero que hago en este trigger es un DELETE de otra tabla, el problema es que postgres extrañamente me borra solo 671 registros de los 1774 que deberia borrar.

Entonces para probar cuales son los cartones fueron los borrados es que lanzo un trigger a la tabla cartones, para en vez que borrar el registro me modifique el campo tiempo con 10000.

Y efectivamente todos los registros (los 1774) que deberia borrar tienen un tiempo de 10000.

Por lo que concluyo que existe algun problema con postgres con el comando DELETE dentro del trigger.
Alguien sabe como solucion esto???