这里有一个几乎相同但没有真正回答的问题。
我正在将应用程序从 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 包含可以简化翻译的重要功能,我将使用它。
一般来说,如果你想编写一些程序代码并让它返回结果,你需要将其放在函数中。例如:
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 函数。
您可以在
DECLARE 子句:=
、
=
和 DEFAULT
声明局部变量,如下所示。 *:=
、=
和DEFAULT
相同:CREATE FUNCTION my_func() RETURNS INTEGER AS $$
DECLARE
value1 INTEGER := 1; -- Here
value2 INTEGER = 2; -- Here
value3 INTEGER DEFAULT 3; -- Here
BEGIN
RETURN value1 + value2 + value3;
END;
$$ LANGUAGE plpgsql;
并且,您可以在 DECLARE
子句中使用ALIAS FOR
声明别名,如下所示。 *别名不能有类型,因为存在错误,并且只有类型的参数是可能的,如下面的中间参数 INTEGER
并使用
$1
(num1
) 和 $2
(中间参数是可能的:)
CREATE FUNCTION my_func(num1 INTEGER, INTEGER, num3 INTEGER) RETURNS INTEGER AS $$
DECLARE
value1 ALIAS FOR $1; -- Here
value2 ALIAS FOR $2; -- Here
value3 ALIAS FOR num3; -- Here
BEGIN
RETURN value1 + value2 + value3;
END;
$$ LANGUAGE plpgsql;
并且,您可以在 DECLARE
子句中声明带有参数的局部变量,如下所示:
CREATE FUNCTION my_func(num1 INTEGER, INTEGER, num3 INTEGER) RETURNS INTEGER AS $$
DECLARE
value1 INTEGER := $1; -- Here
value2 INTEGER := $2; -- Here
value3 INTEGER := num3; -- Here
BEGIN
RETURN value1 + value2 + value3;
END;
$$ LANGUAGE plpgsql;