SELECT INTO有多个归因

fel*_*zkn 11 sql postgresql plpgsql variable-assignment

该指令有效:

SELECT INTO unsolvedNodes array_agg(DISTINCT idDestination)
FROM road 
WHERE idOrigin = ANY(solvedNodes)
AND NOT (idDestination = ANY(solvedNodes));
Run Code Online (Sandbox Code Playgroud)

但我想用这种方式:

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

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

Erw*_*ter 20

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));
Run Code Online (Sandbox Code Playgroud)

您有关键字INTO后跟目标变量列表,并且您有相应的SELECT列表.该INTO条款的目标可以是(引用这里的手册):

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

也:

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

不要SELECT INTOPostgres的SQL方言混淆 - 没有人应该再使用它.它违反标准SQL,最终将被删除.该手册积极阻止其继续使用:

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


Ali*_*eri 16

是的,

SELECT name,family INTO cName, cFamily FROM "CommonUsersModel";
Run Code Online (Sandbox Code Playgroud)

或者

SELECT INTO cName, cFamily name,family  FROM "CommonUsersModel"
Run Code Online (Sandbox Code Playgroud)