首先,我实验了
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
局部变量和初始化局部变量有什么区别?
如果您的目标是保存值,请将其保存到表中。要在会话期间保留它,请将其设为
temp
表。对于交易,temp...on commit drop
。
您还可以使用自定义参数并从函数内部更改它们。
set my.var=2;
否则,您的
value
变量仅在函数执行期间有效,并且会针对每次调用单独重新初始化。