Вывод BREAK в PL/pgSQL

Как получить оператор break в PostgreSQL? У меня есть такая структура:

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

Как я понимаю, он должен только разорвать внутренний цикл for?

Ответы

Ответ 1

Нет BREAK в PL/pgSQL.

EXIT завершает цикл.
CONTINUE продолжается на следующей итерации цикла.
Вы можете прикрепить <<label>> к циклам и добавить его в качестве параметра к каждой из этих команд. Затем вы завершаете/продолжаете помеченный цикл. Иначе, это касается внутреннего цикла.
RETURN выходит из функции (поэтому не применимо в DO инструкции).

Все это относится к процедурным элементам PL/pgSQL, а не к SQL.
Пример кода с использованием всех трех:

Ответ 2

Обратите внимание, что: да! вам нужно "КОГДА", даже если вы в конечном итоге (как я ;-)) с чем-то вроде

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/info/15173194/break-statement-in-pl-pgsql
  ELSE
    -- do something
  END IF;
  ...

который выглядит несколько искаженным как IF, так и WHEN.

Примечание для редактора: Можно сделать ссылку за "ПРОДОЛЖИТЬ" более точной: https://www.postgresql.org/docs/9.6/plpgsql-control-structures.html#AEN66440