首先,我实验了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
局部变量和初始化的局部变量有什么区别?
1条答案
按热度按时间um6iljoc1#
如果您的目标是保存一个值,那么将其保存到一个表中。要在会话期间持久化它,请将其设置为
temp
表。对于事务,请设置为temp...on commit drop
。您也可以使用custom parameters并从函数内部更改它们。
字符串
否则,您的
value
变量只在函数执行期间存在,并且每次调用时都会单独重新初始化。型
| 我的函数|
| --|
| 4 |
型
| 我的函数|
| --|
| 2 |
| 我的函数|
| --|
| 4 |
| 我的函数|
| --|
| 2 |
Demo at db<>fiddle的