Ответ 1
Это касается условной структуры управления CASE
процедурного языка PL/pgSQL, который будет использоваться в функциях plpgsql или DO
. Не следует путать с выражением CASE
SQL. Разный язык! И тонко разные синтаксические правила тоже.
В то время как SQL CASE
может быть встроен в выражения SQL внутри кода PL/pgSQL (который в основном является просто клеем для SQL-команд), вы не можете иметь автономные выражения SQL CASE
(было бы глупостью).
-- inside plpgsql code block:
CASE
WHEN old.applies_to = 'admin' THEN
_applies_to := 'My Self';
ELSE
_applies_to := initcap(old.applies_to);
END CASE;
Вы должны использовать полностью квалифицированные инструкции, завершенные с помощью точки с запятой (;
) и END CASE
чтобы закрыть ее.
Ответьте на дополнительный вопрос в комментарии
Согласно документации ключевое слово ELSE
оператора CASE
не является обязательным. Я цитирую ссылку выше:
Если совпадение не найдено, выполняются инструкции
ELSE
; но еслиELSE
отсутствует, тоCASE_NOT_FOUND
исключениеCASE_NOT_FOUND
.
Однако вы можете использовать пустой ELSE
:
CASE
WHEN old.applies_to = 'admin' THEN
_applies_to := 'My Self';
ELSE
-- do nothing
END CASE;
Это отличается от выражений SQL CASE
где ELSE
является необязательным, но если ключевое слово присутствует, выражение также должно быть дано!