[Db] contatore server side

Domenico L. domenico.lorusso a pleiade.it
Mer 3 Gen 2007 12:07:23 CET


Marcello Vezzelli ha scritto:
> Domenico L. wrote:
>>
>> Se il problema è che i numeri devono essere consecutivi l'approccio è 
>> un po' più complesso... occorre effettuare un'insert con un codice 
>> fittizio, se va tutto a buon fine si può finalmente mettere il codice 
>> corretto...
>
>>
>> Gestire questa cosa tramite trigger o precedure è possibile ma 
>> occorre ragionarci bene...
>
> In caso di POST concomitanti su sessioni diverse, è garantita 
> l'unicità del trigger e quindi del campo numfatt. Poco importa se 
> l'append della fattura 234 è precedente a quello della fattura 233, 
> l'importante è che siano distinte. E cmq la chiave primaria mi 
> garantisce l'ordinamento.
>
> Tu mi dici in pratica di "simulare" lo stesso comportamento con una 
> tabella di appoggio..
> Pero' dovrei avere una tabella per anno, perché può succedere di 
> inserire fatture nel 2006 e nel 2007 contemporaneamente.
> Ogni tabella dovrebbe avere un autoincrementante indipendente.
>
> Che brutto però...
Allora le stored procedure sono molto utili ma secondo me non fanno 
propriamente al caso tuo... (se non devi richiamare una procedura 
passando ogni campo della tabella), meglio invece un trigger after insert.

Insisto sull'after perché se hai bisogno di non avere buchi di 
numerazione, puoi mettere il numero solo dopo che il record è stato 
inserito (metti che ti sei dimenticato un controllo o che ti salta un 
constraint).


Un trigger afeter insert non ha il problema di accedere alla tabella che 
stai modificando, ma cmq è abbastanza pesante fare una select max....
meglio usare una tabella di appoggio con più record (tanto hai anche 
l'anno) il trigger non farà altro che leggere il valore corrente, 
aggiungerci uno, salvare (se il record non c'è fa una insert, si 
dovrebbe poter fare tutto con un'operazione), e quindi finalmente 
modificare il codice con il progressivo corretto.


Problema: che codice ci metto prima? un timestamp, un random, un numero 
negativo o qualcosa di simile.

Quindi la soluzione è chiedi i dati all'utente -> posta a mysql.

Se poi puoi permetterti di avere qualche buco, puoi usare un triggere before insert così non hai il problema del codice dummy



ciauz
-- 
Domenico L.                             icq: 645 44 861

per stupire mezz'ora basta un libro di storia,
io cercai di imparare la Treccani a memoria... [F.d.A.]



Maggiori informazioni sulla lista Db