PostgreSQL не имеет несвязанных запросов - этот метод доступен в Sybase, таких как базы данных (Sybase, MSSQL) и MySQL (MariaDB).В настоящее время вы можете написать функцию, которая может возвращать набор некоторых значений (табличный результат) или возвращать скаляр, композит или массив (обычные функции).
Таким образом, наиболее близкий дизайн вашей процедуры:
CREATE OR REPLACE FUNCTION prepend(inparam text)
RETURNS SETOF text AS $$
BEGIN
RETURN NEXT inparam;
RETURN NEXT 'zyxw' || inparam;
END;
$$ LANGUAGE plpgsql;
Вы можете вызвать эту функцию с помощью SELECT
SELECT * FROM prepend('abcdefg');
Это все, что возможно.Вы не можете установить другие переменные в этом случае.
Это распространенная проблема при переносе хранимых процедур из систем, подобных Sybase, которые используют эту технику, в любую другую базу данных (Postgres, Oracle, DB2, ...).Функциональность этих систем не может быть отображена просто 1: 1.
Поскольку Postgres (plpgsql) не поддерживает неограниченные запросы, синтаксис запрещен.
BEGIN
SELECT 1;
END;
Не имеет смысла там.Любой результат функций plpgsql может быть реализован с помощью переменных OUT
или оператора RETURN
.