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