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???