[Postgresql-it] Re: Problema teorico - multi progressivo (Enrico)

  • From: "Fabio Lovato" <flovato@xxxxxxxxx>
  • To: <postgresql-it@xxxxxxxxxxxxxxxxx>
  • Date: Mon, 28 Feb 2005 09:32:37 +0100

Non ho capito bene il tuo problema
ma se può esserti utile ti dico come
ho risolto qualcosa di simile.
Come saprai le fatture devono
essere obbligatoriamente progressive
di conseguenza non puoi usare le sequenze
ma dovresti gestirle. Inoltre hai il problema del cambio
anno e quindi di documenti con lo stesso numero avrebbero
la stessa chiave.
Questa soluzione gira da un anno e mezzo senza alcun problema
e ti permette di tenere tutto in linea con la chiave primaria esplicita
(diversamente dovresti averne una con l'id e un'altra unique):

TABLE
fav_gruppo        character(6)  not null
fav_numero       integer           not null
fav_situazione    boolean         default true
fav_data_fattura... etc. etc

cvfattut_pkey" primary key, btree (fav_gruppo, fav_numero)

TRIGGER:

CREATE FUNCTION "ins_cvfattut" () RETURNS trigger AS 'declare
myrec record;
BEGIN
IF new.fav_numero = NULL OR new.fav_numero = 0 THEN
select into myrec max(fav_numero) from cvfattut where fav_gruppo =
new.fav_gruppo;
    IF myrec.max > 0 THEN
        new.fav_numero := myrec.max +1;
    ELSE
        new.fav_numero := 1;
    END IF;
END IF;

RETURN new;
END;' LANGUAGE 'plpgsql';


Per ultimo devi gestire la collisione di piu' utenti e
quindi quando inserisci in record

BEGIN WORK
LOCK TABLE tabella IN SHARE MODE;
INSERT INTO tabella  ..lista...  VALUES ...lista...
COMMIT WORK

Puo' sembrare complicato ma ti garantisco
che ti risolve un sacco di problemi
nel tuo caso puoi strutturare quanti bollettari vuoi.

Ciao
Fabio Lovato


Other related posts:

  • » [Postgresql-it] Re: Problema teorico - multi progressivo (Enrico) - Fabio Lovato