Historiquement, Postgresql ne prend pas en charge le code procédural au niveau de la commande - uniquement dans les fonctions. Cependant, dans Postgresql 9, la prise en charge a été ajoutée pour exécuter un bloc de code en ligne qui prend efficacement en charge quelque chose comme ça, bien que la syntaxe soit peut-être un peu étrange et qu'il existe de nombreuses restrictions par rapport à ce que vous pouvez faire avec SQL Server. Notamment, le bloc de code en ligne ne peut pas renvoyer un ensemble de résultats, il ne peut donc pas être utilisé pour ce que vous avez décrit ci-dessus.
En général, si vous voulez écrire du code procédural et qu'il renvoie un résultat, vous devez le mettre dans une fonction. Par exemple :
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();
Le protocole filaire PostgreSQL ne permet pas, pour autant que je sache, des choses comme une commande renvoyant plusieurs ensembles de résultats. Vous ne pouvez donc pas simplement mapper des lots T-SQL ou des procédures stockées sur des fonctions PostgreSQL.