[Db] contatore server side

Marcello Vezzelli marcello a vezz.it
Mer 3 Gen 2007 12:19:47 CET


Domenico L. wrote:
> 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.

After insert dici... quindi devo usare come chiave primaria qualcos'altro.
>
> 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).

Beh in tal caso al trigger before post non ci arriva... o si?
Cioè mi vuoi dire che i constraint vengono valutati dopo l'esecuzione 
del trigger? Paura...
> 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.

Quindi suggerisci una modifica "a posteriori".
>
> Se poi puoi permetterti di avere qualche buco, puoi usare un triggere 
> before insert così non hai il problema del codice dummy

Ovviamente buchi non ce ne devono essere. Diciamo si gestisce lato 
applicazione: le fatture non si possono cancellare (ma solo modificare, 
il numero di fattura rimane comunque assegnato), a meno che non si 
voglia cancellare l'ultima inserita... in tal caso è possibile farlo.
Qui bisogna capire cosa succede se "contemporaneamente" cancello 
l'ultima e ne inserisco una nuova... non è che una transazione vede 
ancora la fattura mentre l'altra l'ha già cancellata? Come si gestiscono 
queste situazioni imbarazzanti?
Ma fare una lock table in questi casi serve a qualcosa o è una bestialità?

Ciao
Marcello






Maggiori informazioni sulla lista Db