PostgreSQL 中的 DEFAULT 局部变量与使用 DECLARE 初始化的局部变量

问题描述 投票:0回答:1

首先,我实验了

DEFAULT
局部变量
value
,它有
2
,如下所示:

CREATE FUNCTION my_func() RETURNS INTEGER AS $$
DECLARE
  value INTEGER DEFAULT 2; -- Here
BEGIN
  IF value = 2 THEN
    value := 4;
    RETURN value;
  ELSE
    value := 2;
    RETURN value;
  END IF;
END;
$$ LANGUAGE plpgsql;

然后,

my_func()
返回
4
两次,没有
4
2
交替,如下所示:

postgres=# SELECT my_func();
 my_func
---------
       4
(1 row)
postgres=# SELECT my_func();
 my_func
---------
       4
(1 row)

其次,我实验了初始化的局部变量

value
,其中有
2
,如下所示:

CREATE FUNCTION my_func() RETURNS INTEGER AS $$
DECLARE
  value INTEGER := 2; -- Here
BEGIN
  IF value = 2 THEN
    value := 4;
    RETURN value;
  ELSE
    value := 2;
    RETURN value;
  END IF;
END;
$$ LANGUAGE plpgsql;

然后,

my_func()
返回
4
两次,没有
4
2
交替,如下所示:

apple=# SELECT my_func();
 my_func
---------
       4
(1 row)
apple=# SELECT my_func();
 my_func
---------
       4
(1 row)

那么,

DEFAULT
局部变量和初始化局部变量有什么区别?

sql postgresql default local-variables declare
1个回答
0
投票

如果您的目标是保存值,请将其保存到表中。要在会话期间保留它,请将其设为

temp
表。对于交易,
temp...on commit drop

您还可以使用自定义参数并从函数内部更改它们。

set my.var=2;

否则,您的

value
变量仅在函数执行期间有效,并且会针对每次调用单独重新初始化。

© www.soinside.com 2019 - 2024. All rights reserved.