[Db] contatore server side

Domenico L. domenico.lorusso a pleiade.it
Mer 3 Gen 2007 11:32:05 CET


Marcello Vezzelli ha scritto:
> Davide Michel 'ZioBudda' Morelli wrote:
>> Marcello Vezzelli ha scritto:
>>>
>>> mi trovo ad affrontare il "classico" problema della numerazione 
>>> fatture per anno.
>>> Ho due bei campi int, numfatt e anno, che formano la chiave primaria.
>
>> devi settare il campo "int" come intero con opzione auto_increment. 
>> In questo modo per ogni inserimento si occupa mysql di mettere il 
>> numero giusto dentro a "int" (quindi la concorrenza).
>> Per ritornarnare questo valore subito dopo il nuovo inserimento devi 
>> utilizzare |mysql_insert_id()|
>
> Ma va bene un autoincrementante in questo caso, visto che il numero di 
> fattura deve ricominciare da 1 ogni anno?
uhm... uhm....
una stored procedure può essere...
in Oracle ti parlerei di sequence e di job schedulati... in mysql ti 
tico come emulare il concetto:

ti crei una tabella chiamata fat_seq:
con un unico attributo numerico

quando devi fare un nuovo inserimento devi iniziare una transazione
fare
update fat_seq  set id=id+1;

[peccato che non c'è la clausola returning]

estrai il nuovo id

fai l'insert chiudi la transazione



Dovresti riuscire a gestire schedulando in qualche modo che a inizio 
anno venga riazzerata la tabella.



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

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