Подтвердить что ты не робот

Как объявить локальные переменные в postgresql?

Здесь почти идентичный, но не ответил на вопрос здесь.

Я переношу приложение из MS SQL Server в PostgreSQL. Во многих местах кода я использую локальные переменные, поэтому я хотел бы пойти на изменение, которое требует меньше работы, поэтому не могли бы вы рассказать мне, что лучший способ перевести следующий код?

-- 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

это возвращает:

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

(1 row(s) affected)

Я буду использовать Postgresql 8.4 или даже 9.0, если он содержит значительные фетауры, которые упростят перевод.

4b9b3361

Ответ 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.