2013-05-01 16 views
9

Instrukcja ta działa:SELECT INTO z więcej niż jednym atrybucji

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

Ale chciałbym użyć czegoś w ten sposób:

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

Jak korzystać tylko z jednego „SELECT INTO” Instrukcja ustawić wiele zmiennych?

Odpowiedz

18

W PL/PGSQL można SELECT INTOjak wiele zmiennych na raz, jak chcesz bezpośrednio. Po prostu miał składnię wstecz:

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

masz słowa kluczowego INTO następuje lista zmiennych docelowych i masz odpowiedni SELECT listę. Celem klauzuli INTO może być (cytowanie the manual here)

... zmienny rekord zmiennej rząd lub listą oddzielonych od prostych i zmiennych pól zapis/rząd.

również:

Klauzula INTO mogą pojawić się niemal wszędzie w poleceniu SQL. Zwykle jest on zapisywany tuż przed lub tuż po liście select_expressions w komendzie SELECT lub na końcu polecenia dla innych typów poleceń. Zaleca się, abyś postępował zgodnie z tą konwencją na wypadek, gdyby parser PL/pgSQL stał się bardziej rygorystyczny w przyszłych wersjach.

To nie mylić z SELECT INTO in the SQL dialect of Postgres - której nikt nie powinien być używany dłużej. Działa to wbrew standardowemu SQL i najprawdopodobniej zostanie usunięte. Instrukcja aktywnie zniechęca do dalszego używania:

Najlepiej użyć CREATE TABLE AS w tym celu w nowym kodzie.

+0

Dziękujemy! Dziękujemy za ręczne odwołanie! –

+1

Huh. Nigdy o tym nie wiedziałem i musiałem coś zepsuć, kiedy testowałem. –

Powiązane problemy