29

如何break在 PostgreSQL 中有语句?我有这样的结构:

for()
 {
 for()
 {
  if(somecondition)
  break;
 }
}

根据我的理解,它应该只打破内for循环?

4

2 回答 2

80

PL/pgSQLBREAK中没有。

EXIT终止循环。
CONTINUE在循环的下一次迭代中继续。
您可以将 a 附加<<label>>到循环并将其作为参数添加到每个命令中。然后你终止/继续标记的循环。否则,它涉及内部循环。
RETURN从函数中退出(因此不适用于DO语句)。

所有这些都适用于 PL/pgSQL 的过程元素,而不是SQL。
使用所有三个的代码示例:

于 2013-03-02T17:30:04.350 回答
0

请注意:是的!你需要“WHEN”,即使你最终(像我一样;-))有类似的东西

LOOP
  ...
  IF l_my_var = 'some condition' THEN
    -- this is ok, bla
    IF l_debug_level >= 2 THEN
      RAISE NOTICE 'debug 2: skipping a duplicate %, l_my_var;
    END IF;
    -- do something
    CONTINUE WHEN TRUE; -- https://stackoverflow.com/questions/15173194/break-statement-in-pl-pgsql
  ELSE
    -- do something
  END IF;
  ...

IF 和 WHEN 看起来有些扭曲。

对编辑的备注:可以使“CONTINUE”后面的链接更精确:https ://www.postgresql.org/docs/9.6/plpgsql-control-structures.html#AEN66440

于 2019-10-07T11:42:53.420 回答