> -----Mensaje original-----
> De: Virginia
> 
> Cierto, disculpen.... el problema es que no hace nada... y 
> lafunción disparadora es la siguiente: 
> 
> CREATE TRIGGER trg_actualiza_concepto
>   BEFORE INSERT OR UPDATE
>   ON autoservicios.toi005_concepto
>   FOR EACH ROW
>   EXECUTE PROCEDURE autoservicios.actualiza_concepto();
> 
>       
>       BEGIN
>         IF TG_OP = 'INSERT' OR TG_OP = 'UPDATE' THEN
>           UPDATE autoservicios.toi005_concepto SET tx_tipo = 
> 'A' WHERE substring(OLD.cod_concepto from 2 for 4) <'0500';
>           UPDATE autoservicios.toi005_concepto SET tx_tipo = 
> 'D' WHERE substring(OLD.cod_concepto from 2 for 4) >='0500';
>         RETURN NEW;
>         END IF;
>       END;
>       

Mi primera impresión es que hacer un update sobre una tabla dentro del
trigger for update de la misma tabla es una pésima idea. En mi humilde
comprender, tu trigger autoservicios.actualiza_concepto() debiera ser:

BEGIN
  IF TG_OP = 'INSERT' OR TG_OP = 'UPDATE' THEN
    IF substring(NEW.cod_concepto, 2, 4) < '0500' THEN 
      NEW.tx_tipo = 'A';
    ELSIF substring(NEW.cod_concepto, 2, 4) >= '0500' THEN 
      NEW.tx_tipo = 'D';
    END IF;
  END IF;
  RETURN NEW;
END;

Fijate que en un INSERT si referencias OLD.cod_concepto te dará un error ya
que el registro OLD es indeterminado.

Saludos,
Fernando.

--
TIP 5: ¿Has leído nuestro extenso FAQ?
         http://www.postgresql.org/docs/faqs.FAQ.html

Responder a