2013-05-01 15 views
9

Diese Anweisung funktioniert:SELECT INTO mit mehr als einer Zuschreibung

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

Aber ich möchte etwas auf diese Weise verwenden:

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

So verwenden nur einen „INTO SELECT“ Anweisung zu setzen mehrere Variablen?

Antwort

18

In PL/pgSQL Sie können SELECT INTOso viele Variablen auf einmal, wie Sie möchten direkt. Sie haben nur die Syntax rückwärts:

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

Sie haben das Stichwort INTO durch eine Liste von Zielvariablen gefolgt, und Sie haben eine entsprechende SELECT Liste. Das Ziel der INTO Klausel kann sein (zitiert the manual here):

... eine Aufzeichnung Variable, eine Zeilenvariable, oder eine kommagetrennte Liste von Variablen und einfachen Aufnahme/Zeilenfeldern.

auch:

Die INTO Klausel fast überall in dem SQL-Befehl angezeigt werden kann. Herkömmlicher geschrieben steht entweder kurz vor oder kurz nach der Liste der select_expressions in einem SELECT Befehl, oder am Ende des Befehls für andere Befehlstypen. Es wird empfohlen, diese Konvention im Falle folgen Sie den PL/pgSQL-Parser strengere in zukünftigen Versionen wird.

Dies ist nicht zu verwechseln mit SELECT INTO in the SQL dialect of Postgres werden - was niemand sollte mehr verwenden. Es geht gegen Standard-SQL und wird wahrscheinlich am ehesten entfernt. Das Handbuch rät aktiv von seiner fortgesetzten Nutzung ab:

Verwenden Sie am besten CREATE TABLE AS für diesen Zweck in neuem Code.

+0

Vielen Dank! Danke für die manuelle Referenz auch! –

+1

Huh. Ich habe das nie gewusst und muss beim Testen etwas verpatzt haben. –

Verwandte Themen