2013-05-01 39 views
9

此指令:SELECT INTO与一个以上的归属

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

回答

18

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_expression中列出或在命令 的末尾写入其他命令类型。如果PL/pgSQL解析器在将来的版本中变得更加严格,建议遵循这个约定 。

这是不要混淆SELECT INTO in the SQL dialect of Postgres - 没人应该是使用了。它违背了标准的SQL,最终很可能会被删除。手动积极鼓励其继续使用:

最好是使用CREATE TABLE AS为此,在新的代码。

+0

谢谢!感谢您的手册参考! – 2013-05-01 10:57:31

+1

呵呵。我从来不知道这一点,并且当我测试时一定会把事情弄糟。 – 2013-05-02 09:24:06