У меня есть цикл в строках, возвращаемых оператором SQL SELECT, и после некоторой обработки данных строки я иногда хочу ОБНОВИТЬ значение строки. Обработка в теле цикла нетривиальна, и я не могу написать ее на SQL. Когда я пытаюсь выполнить UPDATE для выбранной строки, я получаю ошибку (в Perl DBD :: SQLite :: st выполнить не удалось: таблица базы данных заблокирована). Есть ли удобный для чтения и эффективный способ достичь того, что я пытаюсь сделать? Если это не так, есть ли способ сделать это для DBD или SQLite?
Очевидно, что я могу помещать обновления в отдельную структуру данных и выполнять их после цикла, но я бы не хотел, чтобы код выглядел после этого.
Если вам интересно, вот соответствующий код Perl.
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;
}