Um die Zeilen, die Sie von der Funktion zurückerhalten, zu zerlegen, behandeln Sie sie wie jede andere Tabelle:
SELECT * FROM karta_pacjenta('foo45678901');
Funktionen, die eine Reihe von Zeilen zurückgeben, werden auch "Tabellenfunktionen" genannt.
Abgesehen davon würde das, was Sie präsentiert haben, nicht funktionieren.
CREATE FUNCTION karta_pacjenta(_pe varchar)
RETURNS TABLE(data DATE, imie TEXT, nazwisko TEXT
, diagnoza TEXT,przepisany lek TEXT) AS
$func$
SELECT w.dzien, p.imie, p.nazwisko, ch.nazwa, l.nazwa
FROM pacjenci p
JOIN diagnozy d USING (pesel) -- shorthand if columns are unambiguous
JOIN wizyty w USING (pesel)
JOIN choroby ch ON ch.kod_choroby = d.kod_choroby
JOIN recepty r ON r.nr_wizyty = w.nr_wizyty
JOIN leki l ON l.kod_leku = r.kod_leku
WHERE p.pesel = _pe
$func$ LANGUAGE sql;
-
Einfache Anführungszeichen für Spaltennamen sind ein Syntaxfehler. Müssten doppelte Anführungszeichen sein. Verwenden Sie jedoch besser immer nicht in Anführungszeichen gesetzte, legale Namen in Kleinbuchstaben.
-
Geben Sie den Sprachnamen nicht in Anführungszeichen, er ist eine Kennung.
Der Rest ist optional, aber ein guter Ratschlag.
-
Eine einfache SQL-Funktion erledigt hier die Arbeit.
-
Verwenden Sie die explizite JOIN-Syntax. Gleiches Ergebnis, aber viel einfacher zu warten.
-
Es ist wahrscheinlich sinnlos,
varchar(11)
zu verwenden statt nurvarchar
odertext
als Parametertyp. (Es gelten Ausnahmen für Eckfälle.) -
Verwenden Sie Dollar-Quotes - was hier völlig optional ist, aber im Allgemeinen ein guter Stil ist, um den Funktionskörper zu zitieren. Früher oder später werden Sie einfache Anführungszeichen in den Text einfügen wollen.