Tôi có một vòng lặp trên các hàng được trả về bởi một câu lệnh SQL SELECT, và sau một số xử lý trên dữ liệu của một hàng, đôi khi tôi muốn cập nhật giá trị của hàng. Việc xử lý trong cơ thể của vòng lặp là không tầm thường, và tôi không thể viết nó trong SQL. Khi tôi cố gắng thực thi UPDATE cho hàng đã chọn, tôi nhận được một lỗi (theo DBL :: SQLite :: st thực thi của Perl không thành công: bảng cơ sở dữ liệu bị khóa). Có cách nào có thể đọc được, hiệu quả và di động để đạt được những gì tôi đang cố gắng làm không? Nếu không, có một cách cụ thể DBD hoặc SQLite để làm điều đó?Làm thế nào tôi có thể CẬP NHẬT hàng trả về bởi một SELECT trong một vòng lặp?
Rõ ràng, tôi có thể đẩy các bản cập nhật trong cấu trúc dữ liệu riêng biệt và thực thi chúng sau vòng lặp, nhưng tôi sẽ ghét cái nhìn của mã sau đó.
Nếu bạn quan tâm, đây là mã Perl tương ứng.
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;
}
Quá xấu khi sử dụng perl của bạn, Hibernate sẽ là hoàn hảo cho những gì bạn muốn làm. – Zoidberg
Một nội bộ nó sẽ thực hiện các hoạt động không hiệu quả Tôi đang cố gắng để tránh. –
@Zoidberg, quá tệ, chúng tôi không thể giảm bớt những nhận xét vô ích. – friedo