Ho un ciclo sulle righe restituite da un'istruzione SQL SELECT e, dopo l'elaborazione sui dati di una riga, a volte desidero AGGIORNARE il valore della riga. L'elaborazione nel corpo del ciclo non è banale e non riesco a scriverlo in SQL. Quando provo ad eseguire l'UPDATE per la riga selezionata ottengo un errore (in DBD di Perl :: SQLite :: st execute failed: la tabella del database è bloccata). Esiste un modo leggibile, efficiente e portabile per ottenere ciò che sto cercando di fare? In caso contrario, esiste un modo DBD o SQLite specifico per farlo?Come posso AGGIORNARE le righe restituite da una SELECT in un ciclo?
Ovviamente, posso inviare gli aggiornamenti in una struttura dati separata ed eseguirli dopo il ciclo, ma dopo di ciò odierò l'aspetto del codice.
Se sei interessato, ecco il codice Perl corrispondente.
my $q = $dbh->prepare(q{
SELECT id, confLoc FROM Confs WHERE confLocId ISNULL});
$q->execute or die;
my $u = $dbh->prepare(q{
UPDATE Confs SET confLocId = ? WHERE id = ?});
while (my $r = $q->fetchrow_hashref) {
next unless ($r->{confLoc} =~ m/something-hairy/);
next unless ($locId = unique_name_state($1, $2));
$u->execute($locId, $r->{id}) or die;
}
Peccato che usi perl, Hibernate sarebbe perfetto per quello che vuoi fare. – Zoidberg
Un interno eseguirà l'operazione inefficiente che sto cercando di evitare. –
@Zoidberg, peccato che non si possano minimizzare i commenti inutili. – friedo