In einer Grundfunktion Tutorial Postgres gibt es ein Beispiel mit OUT
Parameter wie folgt:Split-Funktion zurückgegebenen Datensatz in mehrere Spalten
create or replace function hi_lo(a numeric,
b numeric,
c numeric,
OUT hi numeric,
OUT lo numeric)
as $$
begin
hi := greatest(a, b, c);
lo := least(a, b, c);
end; $$
language plpgsql;
Dann schauen Ergebnisse wie
select hi_lo(2, 3, 4);
-- returns one column, "hi_lo" with value "(4, 2)".
select * from hi_lo(2, 3, 4);
-- returns two columns, "hi"/4 and "lo"/2.
Aber angenommen, Sie wollen Führen Sie die Funktion für Spalten aus, die von der Ausführung eines Joins stammen, und Sie haben keinen Zugriff, um die Funktion zu ändern oder eine alternative Funktion zu verwenden? Zum Beispiel mit einigen Spielzeug Daten:
select hi_lo(a.actor_id, length(a.name), ma.movie_id)
from
actors a
join
movies_actors ma
on
a.actor_id = ma.movie_id
limit 10;
liefert Ergebnisse in einer einzigen Spalte "hi_lo" haben 2-Tupel-Werte.
Wrapping der Abfrage in Klammern und versuchen, eine select *
von ihm ändert das Format der Ausgabe nicht. So
select *
from (
select hi_lo(a.actor_id, length(a.name), ma.movie_id)
from
actors a
join
movies_actors ma
on
a.actor_id = ma.movie_id
limit 10;
) rr
hat keinen Einfluss auf die Ergebnisform.
Folgende try Ergebnisse in dem Fehler
select (
select * from hi_lo(a.actor_id, length(a.name), ma.movie_id)
)
from
actors a
join
movies_actors ma
on
a.actor_id = ma.movie_id
limit 10;
Schließlich „Unterabfrage nur eine Spalte zurückgeben muß“, versuchte ich auch unnest
aber es gibt einen Fehlerargument Typen als die Tupel Werte als Arrays nicht behandelt werden.
Wie können Sie mehrere Spalten in der Ausgabe erzielen, wenn Sie die Funktionsauswertung nicht in den Bereich from
verschieben können?
Ihre Postgres Version? –