2012-12-07 9 views
5

में एक पाश में एक नंबर Incrementing मैं इस तुरंत उदाहरण से नहीं मिल सका। मैं एक फंक्शन में एक लूप में एक चर बढ़ाना चाहता हूँ।plpgsql

उदाहरण के लिए:

iterator float 4; 

begin 
    iterator = 1; 

    while iterator < 999 
     ..... 
     iterator ++; 

END; 

यह कैसे किया जाना चाहते हैं?

मैं प्रवाह नियंत्रण के बारे में इस दस्तावेज़ देख रहा था:
http://www.postgresql.org/docs/8.4/static/plpgsql-control-structures.html

और उनमें से कोई भी मेरे लिए प्रासंगिक होने के लिए, जब तक इन बिल्कुल एक ही तरीका है एक चर incrementing अनुकरण करने के लिए कर रहे हैं लगता है।

उत्तर

20

plpgsql में एक चर बढ़ाने के लिए:

iterator := iterator + 1; 

कोई ++ ऑपरेटर नहीं है।

इसके अलावा, plpgsql का असाइनमेंट ऑपरेटर := है, = नहीं।
और correct syntax for loops in PL/pgSQL here खोजें।
आपका कोड टुकड़ा इस तरह काम कर सकता था:

DECLARE 
    iterator float4 := 1; -- you can init at declaration time 

BEGIN 
    WHILE iterator < 999 
    LOOP 
     iterator := iterator + 1; 
     -- do stuff 
    END LOOP; 
END; 

एक अन्य विकल्प FOR पाश होगा:

FOR i in 1 .. 999 -- i would be an integer, not a float4 
LOOP 
    -- do stuff 
END LOOP; 
+0

ठीक है, इसलिए जब बयान अंत जबकि साथ समाप्त? अंत लूप क्यों नहीं – CQM

+0

@CQM: क्षमा करें, यह मेरी तरफ एक टाइपो था। फिक्स्ड। –

+0

मेरी पाश के भीतर मैं एसक्यूएल प्रश्नों कर रहा हूँ, उन बयानों का उपयोग '=' सही, यानी 'अद्यतन mytable सेट this_id = finalid ...' – CQM

0

एक sscce

DO $$ 
DECLARE 
    counter INTEGER := 0 ; 
BEGIN 
    WHILE counter <= 5 LOOP 
     counter := counter + 1 ; 
     RAISE NOTICE 'Counter: %', counter; 
    END LOOP ; 
END; $$ 

के लिए अगर आप चर घोषित (बचना चाहते हैं अधिक संक्षिप्त)

DO $$ 
BEGIN 
    FOR counter IN 1..5 LOOP 
     RAISE NOTICE 'Counter: %', counter; 
    END LOOP; 
END; $$ 

credits

संबंधित मुद्दे