有一个几乎相同的,但没有真正回答的问题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,如果它包含重要的功能,将简化翻译。
2条答案
按热度按时间9ceoxa921#
Postgresql历史上不支持命令级的过程代码-仅在函数中。然而,在Postgresql 9中,支持已添加到execute an inline code block,有效地支持类似的东西,尽管语法可能有点奇怪,并且与SQL Server相比有许多限制。值得注意的是,内联代码块不能返回结果集,所以不能用于上面概述的内容。
一般来说,如果你想写一些过程代码并让它返回一个结果,你需要把它放在一个函数中。例如:
字符串
据我所知,PostgreSQL连接协议不允许一个命令返回多个结果集,所以你不能简单地将T-SQL批处理或存储过程Map到PostgreSQL函数。
xfb7svmp2#
您可以在DECLARE clause中使用
:=
,=
声明局部变量,如下所示。*:=
,=
和DEFAULT
是相同的,您可以在PL/pgSQL函数和过程中使用DECLARE
子句声明局部变量:字符串
并且,您可以在
DECLARE
子句中声明带有参数的局部变量,如下所示。* 只有类型的参数是可能的,就像下面的中间参数INTEGER
一样,使用$1
(num1
)和$2
(中间参数INTEGER
)是可能的:型
并且,您可以在
DECLARE
子句中使用ALIAS FOR声明别名,如下所示。* 别名不能有类型,因为有错误,您可以在PL/pgSQL函数和过程中使用DECLARE
子句声明别名:型