【问题标题】:Loop inside a for loop - Plpgsql在 for 循环中循环 - Plpgsql
【发布时间】:2021-04-27 14:20:43
【问题描述】:

我想使用 plpgsql 在 for 循环中设置一个带有循环的查询。 我是这样写的:

for ___ in value..value by 1 loop

  loop
    statement
    exit when ...
  end loop;

end loop;

它在第二个“循环”周围返回一个语法错误,这就是为什么我怀疑这种循环在 for 循环中的可行性。

我希望我说清楚了。

【问题讨论】:

  • dbfiddle.uk/… 看来您的错误与loop 语句本身无关。发布完整的错误文本。
  • Offtopic:您确定需要循环吗?关系数据库在集合上工作,根据我的经验,所有循环都可以用更好(更快!)的解决方案代替。双循环看起来更糟......

标签: postgresql loops for-loop plpgsql


【解决方案1】:

我认为在 postgresql 11.10 中的 plgpgsql 中执行嵌套循环没有问题:

DO $$
DECLARE 
    i integer;
    j integer;
BEGIN
FOR i IN 1..2 LOOP
    FOR j IN 10..12 LOOP
    -- i will take on the values 1,2,3,4,5,6,7,8,9,10 within the loop
    RAISE NOTICE 'loop % %',i,j;
    END LOOP;
END LOOP;
END$$;

我看到了预期的输出:

loop 1 10
loop 1 11
loop 1 12
loop 2 10
loop 2 11
loop 2 12

【讨论】:

    【解决方案2】:

    所以,我看到的最初问题是您的计数器正在“value..value”范围内迭代

    看看这段代码,范围应该是2个不同的值。先试试这个。

    do $$
    begin 
      for counter in 1..6 by 2 loop
        raise notice 'counter: %', counter;
      end loop;
    end; $$
    

    【讨论】:

    • 我不确定我是否理解如何以您所写的形式将 2 个循环替换为一个循环。
    • @AlexYu 问题是被迭代的值,当你的范围是“1..1”或“value..value”时没有范围
    猜你喜欢
    • 1970-01-01
    • 2011-10-18
    • 2019-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    相关资源
    最近更新 更多