web-dev-qa-db-fra.com

Comment déclarer des variables locales dans postgresql?

Il y a une question presque identique, mais pas vraiment répondue ici .

Je migre une application de MS SQL Server vers PostgreSQL. Dans de nombreux endroits du code, j'utilise des variables locales, donc j'aimerais opter pour le changement qui nécessite moins de travail, alors pourriez-vous me dire quelle est la meilleure façon de traduire le code suivant?

-- MS SQL Syntax: declare 2 variables, assign value and return the sum of the two 
declare @One integer = 1
declare @Two integer = 2
select @One + @Two as SUM

cela renvoie:

SUM
-----------
3

(1 row(s) affected)

J'utiliserai Postgresql 8.4 ou même 9.0 s'il contient des fonctionnalités importantes qui simplifieront la traduction.

48
LaBracca

Postgresql ne prend historiquement pas en charge le code procédural au niveau des commandes, uniquement dans les fonctions. Cependant, dans Postgresql 9, la prise en charge a été ajoutée à exécuter un bloc de code en ligne qui prend effectivement 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 jeu de résultats, il ne peut donc pas être utilisé pour ce que vous décrivez ci-dessus.

En général, si vous voulez écrire du code procédural et qu'il retourne 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();

Pour autant que je sache, le protocole de connexion PostgreSQL ne permet pas des choses comme une commande renvoyant plusieurs jeux de résultats. Vous ne pouvez donc pas simplement mapper des lots T-SQL ou des procédures stockées aux fonctions PostgreSQL.

73
araqnid