在plpgsql中增加循环中的数字

CQM*_*CQM 8 sql postgresql increment plpgsql postgresql-8.4

我不能立即从例子中找到这个.我想在一个函数中增加循环中的变量.

例如:

DECLARE
   iterator float4;
BEGIN
   iterator = 1;

    while iterator < 999
       .....
      iterator ++;
END;
Run Code Online (Sandbox Code Playgroud)

怎么做?

我正在查看有关流量控制的文档:http:
//www.postgresql.org/docs/8.4/static/plpgsql-control-structures.html

并且它们似乎都不适合我,除非这些绝对是模拟递增变量的唯一方法.

Erw*_*ter 30

要在plpgsql中增加变量:

iterator := iterator + 1;
Run Code Online (Sandbox Code Playgroud)

没有++操作员.

关于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;
Run Code Online (Sandbox Code Playgroud)

使用FOR循环更简单,更快速的替代方案:

   FOR i in 1 .. 999   -- i is integer automatically, not float4
   LOOP
      -- do stuff
   END LOOP;
Run Code Online (Sandbox Code Playgroud)

手册:

变量name自动定义为类型integer,仅存在于循环内(循环中忽略变量名的任何现有定义).


alb*_*fan 5

对于sscce

DO $$
DECLARE
   counter INTEGER := 0 ; 
BEGIN
   WHILE counter <= 5 LOOP
      counter := counter + 1 ; 
      RAISE NOTICE 'Counter: %', counter;
   END LOOP ; 
END; $$
Run Code Online (Sandbox Code Playgroud)

如果你想避免声明变量(更简洁)

DO $$
BEGIN
   FOR counter IN 1..5 LOOP
      RAISE NOTICE 'Counter: %', counter;
   END LOOP;
END; $$
Run Code Online (Sandbox Code Playgroud)

学分