Tengo un bucle en las filas devueltas por una instrucción SQL SELECT y, después de algún procesamiento en los datos de una fila, a veces quiero ACTUALIZAR el valor de la fila. El procesamiento en el cuerpo del bucle no es trivial, y no puedo escribirlo en SQL. Cuando intento ejecutar UPDATE para la fila seleccionada, aparece un error (en DBD :: SQLite :: st ejecución de Perl fallaron: la tabla de la base de datos está bloqueada). ¿Hay una forma legible, eficiente y portátil de lograr lo que estoy tratando de hacer? En su defecto, ¿existe una forma específica DBD o SQLite para hacerlo?¿Cómo puedo ACTUALIZAR las filas devueltas por un SELECT en un bucle?
Obviamente, puedo insertar las actualizaciones en una estructura de datos separada y ejecutarlas después del ciclo, pero odiaría el aspecto del código.
Si te interesa, aquí tienes el código Perl correspondiente.
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;
}
Lástima que el uso de Perl, Hibernate sería perfecto para lo que quiere hacer. – Zoidberg
Internamente, realizaría la operación ineficiente que trato de evitar. –
@Zoidberg, lástima que no podemos menospreciar los comentarios inútiles. – friedo