2013-05-01 11 views
9

Questa istruzione funziona:SELECT INTO con più di un'attribuzione

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

ma vorrei usare qualcosa in questo modo:

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

Come utilizzare una sola istruzione "SELECT INTO" per impostare più variabili?

risposta

18

In PL/pgSQL si può SELECT INTOcome molte variabili in una sola volta, come ti direttamente. Hai appena avuto la sintassi indietro:

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

Hai la parola INTO seguita da un elenco di variabili target, e si dispone di un corrispondente SELECT lista. L'obiettivo della clausola INTO può essere (citando the manual here):

... una variabile record, una variabile di riga, o un elenco separato da virgole di variabili semplici e campi di registrazione/riga.

anche:

La clausola INTO può apparire quasi ovunque nel comando SQL. In genere è scritto appena prima o subito dopo l'elenco di select_expressions in un comando SELECT o al termine del comando per altri tipi di comando. Si consiglia di seguire questa convenzione nel caso in cui il parser PL/pgSQL diventi più rigido nelle versioni future.

Questo è non deve essere confuso conSELECT INTO in the SQL dialect of Postgres - che nessuno dovrebbe usare più. Va contro lo standard SQL e alla fine verrà rimosso, molto probabilmente. Il manuale scoraggia attivamente il suo uso continuato:

È preferibile utilizzare CREATE TABLE AS per questo scopo in un nuovo codice.

+0

Grazie! Grazie anche per il riferimento manuale! –

+1

Huh. Non l'ho mai saputo, e devo aver messo qualcosa in giro quando ho provato. –

Problemi correlati