SELECT INTO有多个归因

时间:2013-05-01 01:51:37

标签: sql postgresql variable-assignment plpgsql

此说明有效:

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”指令来设置多个变量?

2 个答案:

答案 0 :(得分:19)

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子句的目标可以是(引用the manual here):

  

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

此外:

  

INTO子句几乎可以出现在SQL命令的任何位置。   通常它是在列表之前或之后编写的   在SELECT命令中或命令末尾的select_expressions   对于其他命令类型。建议您按照此操作   如果PL / pgSQL解析器在将来的版本中变得更严格,则使用约定。

不要与SELECT INTO in the SQL dialect of Postgres混淆 - 没有人应该再使用了。它违反标准SQL,最终将被删除。该手册积极阻止其继续使用:

  

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

答案 1 :(得分:2)

是的

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

OR

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