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