22

该指令有效:

SELECT INTO unsolvedNodes array_agg(DISTINCT idDestination)
FROM road 
WHERE idOrigin = ANY(solvedNodes)
AND NOT (idDestination = ANY(solvedNodes));

但我想以这种方式使用一些东西:

SELECT INTO unsolvedNodes array_agg(DISTINCT idDestination), lengths array_agg(length)
FROM road
WHERE idOrigin = ANY(solvedNodes)
AND NOT (idDestination = ANY(solvedNodes));

如何只使用一条SELECT INTO指令设置多个变量?

4

2 回答 2

40

PL/pgSQL中,您可以直接使用任意数量SELECT INTO 的变量。你只是把语法倒过来了:

SELECT INTO unsolvedNodes, lengths 
       array_agg(DISTINCT idDestination), array_agg(length)
FROM   road
WHERE  idOrigin = ANY(solvedNodes)
AND    NOT (idDestination = ANY(solvedNodes));

您有一个关键字INTO后跟一个目标变量列表,并且您有一个相应的SELECT列表。该INTO子句的目标可以是(在此处引用手册):

...记录变量、行变量或简单变量和记录/行字段的逗号分隔列表。

还:

INTO子句几乎可以出现在 SQL 命令中的任何位置。通常它写在命令中的 select_expressions 列表之前或之后SELECT,或者在其他命令类型的命令末尾。建议您遵循此约定,以防 PL/pgSQL 解析器在未来版本中变得更加严格。

不应SELECT INTOPostgres 的 SQL 方言混淆——不应再使用。它违反了标准 SQL,很可能最终会被删除。该手册强烈反对继续使用它:

最好CREATE TABLE AS在新代码中用于此目的。

于 2013-05-01T02:23:31.657 回答
24

是的,

SELECT name,family INTO cName, cFamily FROM "CommonUsersModel";

或者

SELECT INTO cName, cFamily name,family  FROM "CommonUsersModel"
于 2018-10-03T07:35:09.493 回答