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