यह कई बार here और here से पूछा गया है, लेकिन मेरे किसी भी उत्तर में मेरे उत्तर में उपयुक्त नहीं है क्योंकि मैं अपने अद्यतन विवरण को पीएल/पीजीएसक्यूएल फ़ंक्शन में उपयोग नहीं करना चाहता हूं और उपयोग नहीं करना चाहता GET DIAGNOSTICS integer_var = ROW_COUNT
।रॉ में अद्यतन विवरण द्वारा प्रभावित पंक्तियां plpgsql
मुझे इसे कच्चे एसक्यूएल में करना है।
उदाहरण के लिए, एमएस एसक्यूएल सर्वर में हम @@ ROWCOUNT जो की तरह इस्तेमाल किया जा सकता है निम्नलिखित:
UPDATE <target_table>
SET Proprerty0 = Value0
WHERE <predicate>;
SELECT <computed_value_columns>
FROM <target>
WHERE @@ROWCOUNT > 0;
डेटाबेस मैं जानता हूँ कि अगर अद्यतन सफल था और परिकलित मानों वापस पाने के लिए एक गोल यात्रा में ।
'@@ ROWCOUNT' के बजाय क्या उपयोग किया जा सकता है? क्या कोई इस बात की पुष्टि कर सकता है कि वास्तव में यह वास्तव में असंभव है?
अग्रिम धन्यवाद।
संपादित करें 1: मैं पुष्टि करता हूं कि मुझे कच्चे एसक्यूएल का उपयोग करने की आवश्यकता है (मैंने मूल विवरण में "कच्चे plpgsql" लिखा है)।
मेरे सवाल का स्पष्ट विचार है कि अद्यतन बयान केवल एक पंक्ति को प्रभावित करता है और आशावादी संगामिति के बारे में सोचना कृपया सुनिश्चित करने की कोशिश में:
ग्राहक पहली बार में एक
SELECT
वक्तव्य था।वह अद्यतन बनाता है और जानता है कि कौन से डेटाबेस गणना कॉलम को चयन खंड में शामिल किया जाना है। अन्य चीजों के अलावा, भविष्यवाणी में एक टाइमस्टैम्प शामिल होता है जिसे पंक्तियों को अद्यतन होने पर हर बार गणना की जाती है।
तो, यदि हमारे पास 1 पंक्ति लौटा है तो सब कुछ ठीक है। यदि कोई पंक्ति वापस नहीं आती है तो हम जानते हैं कि पिछले अपडेट था और क्लाइंट को फिर से क्लोज़ अपडेट करने का प्रयास करने से पहले डेटा रीफ्रेश करने की आवश्यकता हो सकती है। यही कारण है कि हमें गणना करने की आवश्यकता है कि गणना कॉलम लौटने से पहले अद्यतन कथन से कितनी पंक्तियां प्रभावित हुईं। यदि अपडेट विफल रहता है तो कोई पंक्ति वापस नहीं की जानी चाहिए।
कृपया प्रश्नों में हमेशा अपने PostgreSQL संस्करण का उल्लेख करें। –
तो आप ** पीएल/पीजीएसक्यूएल में नहीं करना चाहते हैं लेकिन एसक्यूएल में करना चाहते हैं। अन्यथा आप * प्राप्त कर सकते हैं 'ग्रेट डायग्नोस्टिक' –
@ क्रिएगिंगर: संबंधित टैग देखें। –