Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

Problema DELETE dentro de un trigger

Estas en el tema de Problema DELETE dentro de un trigger en el foro de PostgreSQL en Foros del Web. Hola a todos los del foro, este es mi post y espero que me puedan ayudar. tengo el sgte trigger: Código: -- Function: actualizacartones() -- ...
  #1 (permalink)  
Antiguo 28/12/2009, 14:40
 
Fecha de Ingreso: diciembre-2009
Mensajes: 2
Antigüedad: 14 años, 10 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???
  #2 (permalink)  
Antiguo 29/12/2009, 10:21
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Problema DELETE dentro de un trigger

la tabla que valores tiene?

en el delete le dices que borre los registros de hoy y de fechas futuras.

debes compartirnos el .sql con los registros para determinar el problema.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 30/12/2009, 19:18
 
Fecha de Ingreso: diciembre-2009
Mensajes: 2
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Problema DELETE dentro de un trigger

Disculpen la dermora , pero te refieres al .backup??? la base de datos entera???
  #4 (permalink)  
Antiguo 30/12/2009, 19:52
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Problema DELETE dentro de un trigger

sirve ese.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:28.