Вывод 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