Funktion zurückgegebener Datensatz in mehrere Spalten aufteilen
In einem grundlegenden Tutorial zu Postgres-Funktionen gibt es ein Beispiel mitOUT
Parameter wie folgt:
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 sehen die Ergebnisse aus 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 nehmen Sie an, Sie möchten die Funktion für Spalten ausführen, die aus einer Verknüpfung stammen, und Sie haben keinen Zugriff, um die Funktion zu ändern oder eine alternative Funktion zu verwenden? Zum Beispiel mit einigen Spielzeugdaten:
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;
returns ergibt in einer einzigen Spalte "hi_lo" 2-Tupel-Werte.
Wrapping die Abfrage in Klammern und versuchen, einselect *
from ändert das Format der Ausgabe nicht. S
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
beeinflusst die Ergebnisform nicht.
Der folgende Versuch führt zu dem Fehler "Unterabfrage darf nur eine Spalte zurückgeben"
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 habe ich auch versuchtunnest
aber es gibt einen Argumenttypfehler, da die Tupelwerte nicht als Arrays behandelt werden.
Wie können Sie mehrere Spalten in der Ausgabe erreichen, wenn Sie die Funktionsbewertung nicht in das @ verschieben könnefrom
Sektion