13

例からすぐにこれを見つけることができませんでした。関数内のループ内で変数をインクリメントしたい。

例えば:

DECLARE
   iterator float4;
BEGIN
   iterator = 1;

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

これはどのように行われますか?

フロー制御に関するこのドキュメントを見ていました:
http://www.postgresql.org/docs/8.4/static/plpgsql-control-structures.html

そして、これらが変数のインクリメントをシミュレートする唯一の方法でない限り、それらのどれも私には関係がないようです。

4

2 に答える 2

39

plpgsqlで変数をインクリメントするには:

iterator := iterator + 1;

++オペレーター はいません。

plpgsqlの代入演算子について:

マニュアルのPL/pgSQLのループの正しい構文

コードフラグメントは次のように機能します。

DECLARE
   iterator float4 := 1;  -- we 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 is integer automatically, not float4
   LOOP
      -- do stuff
   END LOOP;

マニュアル:

変数nameは自動的に型として定義されinteger、ループ内にのみ存在します(変数名の既存の定義はループ内で無視されます)。

于 2012-12-07T21:18:12.443 に答える
3

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; $$

クレジット

于 2016-09-12T12:45:30.913 に答える