在 PL/pgSQL 中将函数或表达式的结果赋值给变量时,什么时候需要使用SELECT
语句(子查询)?
这可能只是我对 SQL 的误解。我认为一切都应该包含在 a 中(SELECT ...)
(即使它只涉及计算一个数字),例如
$$
DECLARE parts text[];
BEGIN
parts := (SELECT string_to_array(my_str,'_') );
...
$$
但我只是发现它没有SELECT
:
parts := string_to_array(my_str,'_');
(就好像我可以像使用 Pascal 一样使用 PL/pgSQL。)
一般情况下,什么样的表达式可以不SELECT
计算值而直接使用?
这只是一个有根据的猜测。
似乎
SELECT
是不必要的,因为它已经存在,例如在SELECT ... INTO
赋值:=
等价于的隐式中。从文档中:此处可能显示一个示例,其中:
也可以写成
这似乎是可能的,因为第二个简化形式等同
SELECT INTO
于 PL/pgSQL 中的 a:第一种形式相当于:
,其中有一个
SELECT
可以删除的冗余层。另一方面,当隐式
SELECT
不存在时,显式SELECT
似乎是必要的。比如同一个函数不能直接使用(即不用SELECT
)如果它不在对变量的赋值中。
简短回答每个表达式都是一个选择语句。
https://www.postgresql.org/docs/10/static/plpgsql-expressions.html
这意味着您可以在赋值语句和 after if 语句中使用 from 子句等。