Как объявить локальные переменные в postgresql? - PullRequest
48 голосов
/ 01 июля 2010

Существует почти идентичный, но не совсем отвеченный вопрос здесь .

Я переносю приложение из 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

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

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

(1 row(s) affected)

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

1 Ответ

73 голосов
/ 01 июля 2010

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...