Sql server 如何在postgresql中声明局部变量?

Sql server 如何在postgresql中声明局部变量?,sql-server,postgresql,migration,Sql Server,Postgresql,Migration,有一个几乎相同但没有真正回答的问题 我正在将一个应用程序从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 s

有一个几乎相同但没有真正回答的问题

我正在将一个应用程序从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,如果它包含可以简化翻译的重要功能。

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 wire协议不允许像命令返回多个结果集这样的事情。因此,您不能简单地将t-SQL批处理或存储过程映射到PostgreSQL函数。

这篇文章可能会有所帮助?可能与相同似乎您必须等待9.0-。@jeppinstall:是的,他们说您需要使用一种过程语言,如PL/pgSQL,而不是SQL过程语言。。。那么PL/pgSQL语法是什么呢?wire协议允许几个命令。因此,几个不同的结果集(在异步模式下)。@Jasen I特别指返回多个结果集/结果计数的单个查询,而不是飞行中的多个查询响应周期。尽管自2010年以来,这种情况可能已经发生了变化,但可以将任务重新编写为多个调用<代码>从f1()中选择*;从f2()中选择*;从f3()中选择*并接收多个不同的结果集。