From: | "Fernando Hevia" <fhevia(at)ip-tel(dot)com(dot)ar> |
---|---|
To: | "'Virginia'" <mavir78(at)gmail(dot)com>, "'Ayuda'" <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | RE: [Spam] Fwd: duda con trigger.... |
Date: | 2009-04-08 16:37:36 |
Message-ID: | ADD44229E40C45CB991870E6AD5514CD@iptel.com.ar |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
> -----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.
From | Date | Subject | |
---|---|---|---|
Next Message | Alvaro Herrera | 2009-04-08 16:39:35 | Re: Sobre traducción de la Wiki |
Previous Message | Emanuel Calvo Franco | 2009-04-08 16:36:26 | Re: [pgsql-es-ayuda] Sobre traducción de la Wiki |