Структура управления PostgreSQL IF-THEN-ELSE
Почему я всегда получаю следующую ошибку от Postgres?
syntax error at or near "IF"
Я читаю PostgreSQL: Документация: 8.3: Структуры управления. Сначала я попытался выполнить сложный запрос (с подзапросом), но затем я попытался выполнить простой такой:
IF 2 <> 0 THEN select * from users; END IF;
Ошибка остается прежней. Что я делаю неправильно?
Ответы
Ответ 1
IF 2 <> 0 THEN select * from users; END IF;
Вы не можете использовать заявления PL/pgSQL вне функций plpgsql. И если этот фрагмент из функции plpgsql, то это тоже бессмыслица. Вы не можете напрямую возвращать результат запроса, как это делает T-SQL.
CREATE OR REPLACE FUNCTION test(p int)
RETURNS SETOF users AS $$
BEGIN
IF p = 1 THEN
RETURN QUERY SELECT * FROM users;
END IF;
RETURN;
END;
$$ LANGUAGE plpgsql;
Когда вы получите некоторый результат от функции, вы должны использовать инструкцию RETURN - plpgsql знает только функцию, она не поддерживает процедуры - поэтому неограниченный SELECT не имеет смысла.
Ответ 2
Вы не включаете эту структуру управления PL/pgSQL в анонимный блок или функцию PL/pgSQL.
Для SQL-версии этой структуры управления см. документы для CASE
.
Ответ 3
Вы не включаете этот PL/pgSQL. Они должны быть заключены с анонимным блоком кода. Пример для вашего кода:
DO $$ BEGIN
IF 2 <> 0 THEN select * from users; END IF;
END$$;