在plpgsql中循环中递增一个数字

16

我在示例中没有立即找到这个内容。我想在循环中的函数中递增一个变量。

例如:

DECLARE
   iterator float4;
BEGIN
   iterator = 1;

    while iterator < 999
       .....
      iterator ++;
END;
这该怎么做?
我在看与流程控制相关的这份文档:
http://www.postgresql.org/docs/8.4/static/plpgsql-control-structures.html 但是除非这些是模拟递增变量的唯一方式,否则它们似乎都与我无关。
2个回答

43

在 plpgsql 中增加一个变量的值:

iterator := iterator + 1;

在 PL/pgSQL 中没有 ++ 运算符。

关于 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类型,在循环内部才存在(任何现有的name变量定义都会在循环内被忽略)。


在我的循环中,我正在执行 SQL 查询,这些语句使用 = 正确吗,例如 UPDATE mytable SET this_id = finalid... - CQM
@CQM:没错,那些是嵌入式SQL语句,其中=是赋值运算符。更多信息请参见 - Erwin Brandstetter

5

For a 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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接