RE: Correlativos

From: Mximo Eduardo Mndez <mmendez(at)ceride(dot)gov(dot)ar>
To: "Diego Gil" <diego(at)adminsa(dot)com>, maob85(at)hotmail(dot)com
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: RE: Correlativos
Date: 2005-09-07 09:07:37
Message-ID: BasiliX-1.1.1_fix2-1126094857431ed8098a30c@wwwmail.ceride.gov.ar
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola muchachos. Yo me pregunto ahora lo siguiente, si elimins un registro o modifics el tipo, te va a quedar un hueco en el orden para ese tipo, y me parece que es eso lo que quieres evitar, que no haya huecos. Tal vez lo que necesitas es una llave primaria para la tabla (que por supuesto puede ser una secuencia si importar si quedan o no huecos). Se me hace que tienes un problema en el diseo. Es una reflexin, nada ms ;-)

Mximo E. Mndez
CERIDE

06 Sep 2005 17:45 ART usted escribio:

> Yo creo que deberias usar BEFORE INSERT. No lo probe pero creo que seria
> algo asi :
>
> CREATE OR REPLACE FUNCTION correlativos()
> RETURNS TRIGGER AS $BODY$
> DECLARE
>
> BEGIN
> -- Work out the increment/decrement amount(s).
> IF (TG_OP = 'INSERT') THEN
> IF (NEW.tipo='1') THEN
> NEW.codigo = nextval('secuencia1'::text);
> ELSEIF (NEW.tipo='2') THEN
> NEW.codigo = nextval('secuencia2'::text);
> ElSE
> NEW.codigo = 0;
> END IF;
>
> END IF;
>
> RETURN NEW;
>
> END;
> $BODY$ LANGUAGE plpgsql;
>
>
> CREATE TRIGGER correlativos
> BEFORE INSERT ON temp
> FOR EACH ROW EXECUTE PROCEDURE correlativos();
>
> Saludos,
> Diego.
>
>
> El mar, 06-09-2005 a las 20:00 0000, Miguel Ortega escribi:
> > Hola de nuevo... Llegue a algo tosco pero que funciona... Queria saber
> > si alguno tiene idea de como optimizar este trigger.... Tengo una duda
> > con el Update (Cambiara la fila que debe cambiar o existe la
> > posibilidad de que guarden un registro antes de que el trigger
> > corra?). Les anexo el codigo:
> >
> > CREATE OR REPLACE FUNCTION correlativos() RETURNS TRIGGER AS
> > $correlativos$
> > DECLARE
> > correlativo integer;
> > posicion integer;
> > BEGIN
> > -- Work out the increment/decrement amount(s).
> > IF (TG_OP = 'INSERT') THEN
> > IF (NEW.tipo='1') THEN
> > correlativo=nextval('secuencia1'::text);
> > ELSEIF (NEW.tipo='2') THEN
> > correlativo=nextval('secuencia2'::text);
> > ElSE
> > correlativo=0;
> > END IF;
> > --posicion=NEW.idcodigo;
> > END IF;
> >
> > UPDATE temp set codigo= correlativo WHERE idcodigo=(SELECT
> > max(idcodigo) FROM temp);
> > --NEW.codigo := correlativo;
> > RETURN NULL;
> > END;
> > $correlativos$ LANGUAGE plpgsql;
> > CREATE TRIGGER correlativos
> > AFTER INSERT ON temp
> > FOR EACH ROW EXECUTE PROCEDURE correlativos();
>
>
> ---------------------------(fin del mensaje)---------------------------
> TIP 1: para suscribirte y desuscribirte, visita http://archives.postgresql.org/pgsql-es-ayuda

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Mximo Eduardo Mndez 2005-09-07 09:32:09 Re: Numero de Conexiones
Previous Message Juanky Moral 2005-09-07 07:08:45 Re: Restriccion CHECK