मेरे पास एक SQL SELECT कथन द्वारा लौटाई गई पंक्तियों पर एक लूप है, और, पंक्ति के डेटा पर कुछ प्रोसेसिंग के बाद, मैं कभी-कभी पंक्ति के मान को अपडेट करना चाहता हूं। लूप के शरीर में प्रसंस्करण गैर-तुच्छ है, और मैं इसे एसक्यूएल में नहीं लिख सकता। जब मैं चयनित पंक्ति के लिए अद्यतन निष्पादित करने का प्रयास करता हूं तो मुझे एक त्रुटि मिलती है (पर्ल के डीबीडी :: SQLite :: st execute विफल: डेटाबेस तालिका लॉक है)। क्या मैं जो करने की कोशिश कर रहा हूं उसे हासिल करने के लिए एक पठनीय, कुशल और पोर्टेबल तरीका है? ऐसा विफल होने पर, क्या ऐसा करने के लिए कोई डीबीडी या SQLite-विशिष्ट तरीका है?मैं एक लूप में एक चयन द्वारा लौटाई गई पंक्तियों को कैसे अपडेट कर सकता हूं?
जाहिर है, मैं अद्यतन को अलग डेटा संरचना में धक्का दे सकता हूं और लूप के बाद उन्हें निष्पादित कर सकता हूं, लेकिन इसके बाद मैं कोड के नफरत से नफरत करता हूं।
यदि आप रुचि रखते हैं, तो संबंधित पर्ल कोड है।
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;
}
आपके द्वारा perl का उपयोग करने में बहुत बुरा, हाइबरनेट आप जो करना चाहते हैं उसके लिए बिल्कुल सही होगा। – Zoidberg
एक आंतरिक रूप से यह अक्षम ऑपरेशन करेगा जो मैं टालने की कोशिश कर रहा हूं। –
@ ज़ॉयडबर्ग, बहुत बुरा हम बेकार टिप्पणियों को कम नहीं कर सकते हैं। – friedo