2012-12-07 10 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

そしてそれらのどれも。

iterator := iterator + 1; 

++オペレータがありません:plpgsqlがで変数をインクリメントする

答えて

20

また、plpgsqlの代入演算子は:=であり、=ではありません。
correct syntax for loops in PL/pgSQL hereを見つけてください。
あなたのコードは次のように仕事ができる:あなたは(変数を宣言しないようにしたい場合はsscce

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

については

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

大丈夫ですか?なぜループを終了しないでください – CQM

+0

@CQM:申し訳ありません、それは私の側のタイプミスでした。一定。 –

+0

私のループの中で私はSQLクエリを実行していますが、これらの文は '='正しいもの、つまりUPDATE mytable SET this_id = finalid ... 'を使用します。 – CQM

0

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

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

は別のオプションは、FORループだろうより簡潔な)

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

関連する問題