आप नहीं DECLARE
(वैश्विक) चर (वहां हैं समाधान
) और न ही सादे SQL के साथ लूप - @bma
द्वारा प्रदत्त रिकर्सिव सीटीई के अपवाद के साथ (जो वास्तव में पुनरावृत्ति . है पंक्तियों के ऊपर, लूपिंग नहीं, सख्ती से बोलना)।
हालांकि , वहाँ है DO
कथन
ऐसे तदर्थ प्रक्रियात्मक कोड के लिए। पोस्टग्रेज 9.0 के साथ पेश किया गया। यह एक बार के फ़ंक्शन की तरह काम करता है, लेकिन कोई पैरामीटर नहीं लेता है और कुछ भी वापस नहीं करता है। आप RAISE
कर सकते हैं
नोटिस और अन्य, इसलिए आपका उदाहरण ठीक काम करेगा:
DO
$do$
DECLARE
_counter int := 0;
BEGIN
WHILE _counter < 10
LOOP
_counter := _counter + 1;
RAISE NOTICE 'The counter is %', _counter; -- coerced to text automatically
END LOOP;
END
$do$
यदि अन्यथा निर्दिष्ट नहीं है, तो मुख्य भाग में भाषा डिफ़ॉल्ट रूप से plpgsql
. है . आप किसी भी पंजीकृत प्रक्रियात्मक भाषा
का उपयोग कर सकते हैं हालांकि, अगर आप इसे घोषित करते हैं (जैसे:LANGUAGE plpython
)।
पोस्टग्रेज generate_series()
भी ऑफर करता है
सेट एड-हॉक उत्पन्न करने के लिए, जो कई मामलों में लूपिंग की आवश्यकता को कम कर सकता है। उदाहरण के लिए SO पर यहां खोज करने का प्रयास करें।
साथ ही, आप WHERE
. का उपयोग कर सकते हैं एक डेटा-संशोधित सीटीई
में क्लॉज फोर्क मामलों के लिए सादे SQL में और IF .. THEN .. ELSE .. END
का अनुकरण करें ...