[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: SQL: incrementare valore



On 29/04/2017 10:17, Federico Di Gregorio wrote:
Puoi fare:

UPDATE mee SET r_co = (SELECT max(r_co) FROM mee) + r_to - r_fr WHERE r_id = ...
Questa soluzione è sicuramente corretta solo se l'update va fatta su una 
singola riga.
Se invece si devono aggiornare in blocco N righe (i.e. 'where id in 
...), allora AFAIK il risultato
dipende da come è stato implementato l'ottimizzatore di query: se decide 
di calcolare la max
una volta per tutte all'inizio si avrà un risultato, altrimenti se ne 
avrà un altro e tempi di
esecuzione più lunghi.

[E può anche esserci uno standard che sancisce uno o l'altro comportamento, bisogna
comunque vedere se il DBMS lo rispetta.]

In ogni caso, in dipendenza dalle esigenze della logica di business, si possono avere due situazioni a seconda o meno che serva che venga ricalcolato il max per ogni riga, e comunque affidarsi alla buona grazia dell'implementazione dell'ottimizzatore non è una soluzione accettabile oggi. Lavorare come Mel andava bene negli anni '50/60 del secolo
scorso.

La stored procedure rimane una soluzione affidabile ed elegante.
--
Gian, stavolta non su uno smartphone.



Reply to: