Ответ 1
Postgresql исторически не поддерживает процедурный код на командном уровне - только внутри функций. Однако в Postgresql 9 была добавлена поддержка выполнить встроенный блок кода, который фактически поддерживает что-то вроде этого, хотя синтаксис, возможно, немного нечетный, и существует множество ограничений по сравнению с тем, что вы можете делать с SQL Server. Примечательно, что встроенный блок кода не может вернуть результирующий набор, поэтому его нельзя использовать для того, что вы начертили выше.
В общем случае, если вы хотите написать некоторый процедурный код и вернуть результат, вам нужно поместить его внутри функции. Например:
CREATE OR REPLACE FUNCTION somefuncname() RETURNS int LANGUAGE plpgsql AS $$
DECLARE
one int;
two int;
BEGIN
one := 1;
two := 2;
RETURN one + two;
END
$$;
SELECT somefuncname();
Проводной протокол PostgreSQL, насколько мне известно, не позволяет такие вещи, как команда, возвращающая несколько наборов результатов. Таким образом, вы не можете просто сопоставлять партии T-SQL или хранимые процедуры с функциями PostgreSQL.