Al lavoro abbiamo un tavolo per contenere le impostazioni che contiene essenzialmente le seguenti colonne:aggiornamento Impedire alle righe inesistenti
PARAMNAME
VALUE
La maggior parte del tempo nuove impostazioni sono aggiunto, ma in rare occasioni, le impostazioni vengono rimosse. Sfortunatamente ciò significa che qualsiasi script che potrebbe aver precedentemente aggiornato questo valore continuerà a farlo nonostante il fatto che l'aggiornamento abbia come risultato "0 rows updated
" e porti a un comportamento imprevisto.
Questa situazione è stata rilevata di recente da un errore del test di regressione, ma solo dopo molte indagini sul perché i dati nel sistema erano diversi.
Quindi la mia domanda è: C'è un modo per generare una condizione di errore quando un aggiornamento comporta l'aggiornamento di zero righe?
Qui ci sono alcune opzioni che ho pensato, ma nessuno di loro sono davvero tutto ciò che auspicabile:
- PL involucro/SQL, che nota l'aggiornamento fallito e genera un'eccezione.
- Non ideale in quanto non impedisce a nessuno/a uno script di eseguire manualmente un aggiornamento.
- Un trigger sul tavolo che genera un'eccezione.
- Contrasta con la nostra politica attuale di attivazione graduale dei trigger.
- Richiede l'aggiornamento del trigger ogni volta che un'impostazione viene rimossa e mantiene un elenco di impostazioni obsolete (se si esegue l'esclusione).
- Potrebbe avere problemi con la tabella di muting (se si esegue l'inclusione interrogando quali impostazioni esistono attualmente).
Come può un aggiornamento di 0 righe portare alla sI che i dati sono diversi? –
@ TheNail L'impostazione in questione era un ritardo. Nel vecchio codice il valore è stato aggiornato e i dati includevano il ritardo dato. Nel nuovo codice non lo era. Regressione ergo La stessa cosa sarebbe accaduta se l'impostazione controllasse se alcune funzionalità erano attive o meno. –