Существует почти идентичен, но не вопрос, на который действительно отвечают, здесь.
Я перемещаю приложение от SQL Server MS до 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, если он будет содержать значительный fetaures, который упростит перевод.
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.