RE: [Spam] Fwd: duda con trigger....

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.

In response to

Browse pgsql-es-ayuda by date

  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