Postgresql 仅在特定条件下执行循环
如果你写这个Postgresql 仅在特定条件下执行循环,postgresql,postgresql-9.2,Postgresql,Postgresql 9.2,如果你写这个 DECLARE res INTEGER; DECLARE loop_res INTEGER; BEGIN SELECT 0 INTO loop_res; FOR i IN 1..5 LOOP SELECT loop_res + i INTO loop_res; END LOOP; SELECT case WHEN s
DECLARE res INTEGER;
DECLARE loop_res INTEGER;
BEGIN
SELECT 0 INTO loop_res;
FOR i IN 1..5 LOOP
SELECT loop_res + i INTO loop_res;
END LOOP;
SELECT
case
WHEN some_variable < 3
THEN --some result
WHEN some_variable >= 3
THEN loop_res
END
INTO res;
在字符处或附近给出错误语法错误…您试图混合PL/PgSQL和SQL。它们其实不是一回事 选择。。。当。。。其他的结束…,正如您所写的是常规SQL。它不能嵌入PL/PgSQL语句 PL/PgSQL案例不会出现在常规的SELECT中,而只是作为一个控制结构出现。它不支持导入,因为它不是一个SELECT。这是案件的形式当。。。其他的终例 看 你可以写:
CASE
WHEN some_variable < 3 THEN
res := 0;
WHEN some_variable >= 3 THEN
FOR i IN 1..5 LOOP
loop_res := loop_res + i;
END LOOP;
res := loop_res;
END CASE;
这是一个PL/PgSQL案例。整个方法看起来很奇怪,但您只显示了伪代码,所以我无法真正说出您真正想要做的是什么。非常不寻常的是,您需要循环,而不仅仅是使用一些更智能的SQL,但它确实发生了
在这种情况下,我觉得您很可能能够使用联合、查询CTE和/或生成_序列来编写查询,以避免需要缓慢的PL/PgSQL循环和控制结构。您正在尝试混合PL/PgSQL和SQL。它们其实不是一回事 选择。。。当。。。其他的结束…,正如您所写的是常规SQL。它不能嵌入PL/PgSQL语句 PL/PgSQL案例不会出现在常规的SELECT中,而只是作为一个控制结构出现。它不支持导入,因为它不是一个SELECT。这是案件的形式当。。。其他的终例 看 你可以写:
CASE
WHEN some_variable < 3 THEN
res := 0;
WHEN some_variable >= 3 THEN
FOR i IN 1..5 LOOP
loop_res := loop_res + i;
END LOOP;
res := loop_res;
END CASE;
这是一个PL/PgSQL案例。整个方法看起来很奇怪,但您只显示了伪代码,所以我无法真正说出您真正想要做的是什么。非常不寻常的是,您需要循环,而不仅仅是使用一些更智能的SQL,但它确实发生了
在这种情况下,我觉得您很可能能够使用联合、查询CTE和/或生成_系列来编写查询,以避免需要缓慢的PL/PgSQL循环和控制结构。非常感谢,我没有真正做什么,我只是在学习和测试如何在具体情况下使用cycle语句。@OTARIKI啊,这更有意义。只要可以避免在PL/PgSQL中使用循环,就应该这样做。与在普通SQL中执行相同的工作相比,它的效率非常低。非常感谢,我不是在做什么,我只是在学习和测试如何在具体情况下使用cycle语句。@OTARIKI啊,这更有意义。只要可以避免在PL/PgSQL中使用循环,就应该这样做。与在普通SQL中执行相同的工作相比,它的效率非常低。