2012-12-07 128 views
5

我無法立即從示例中找到該數字。我想在一個函數中增加一個循環中的變量。在plpgsql循環中遞增數字

例如:

iterator float 4; 

begin 
    iterator = 1; 

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

END; 

這將如何做呢?

我一直在尋找這個文件有關流量控制:
http://www.postgresql.org/docs/8.4/static/plpgsql-control-structures.html

而且他們都不是相關的對我來說,除非這些是絕對模擬遞增一個變量的唯一途徑。

回答

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

沒關係,所以while語句以end結束while while?爲什麼不結束循環 – CQM

+0

@CQM:對不起,這是我的錯字。固定。 –

+0

在我的循環內我正在做sql查詢,那些語句使用'='正確,即'UPDATE mytable SET 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