有一个几乎相同但没有真正回答的问题here。
我正在将应用程序从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。
答案 0 :(得分:72)
Postgresql历史上不支持命令级别的过程代码 - 仅在函数内。但是,在Postgresql 9中,execute an inline code block已经添加了对这类内容有效支持的支持,虽然语法可能有点奇怪,并且与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函数。