Per scomporre le righe che ottieni dalla funzione trattala come qualsiasi altra tabella:
SELECT * FROM karta_pacjenta('foo45678901');
Le funzioni che restituiscono un insieme di righe sono anche chiamate "funzioni di tabella".
A parte questo, quello che hai presentato non funzionerebbe.
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;
-
Le virgolette singole per i nomi delle colonne sono un errore di sintassi. Dovrebbero essere virgolette doppie. È meglio usare sempre nomi non quotati, legali e minuscoli, però.
-
Non citare il nome della lingua, è un identificatore.
Il resto è facoltativo, ma un buon consiglio.
-
Una semplice funzione SQL fa il lavoro qui.
-
Usa la sintassi JOIN esplicita. Stesso risultato, ma molto più facile da mantenere.
-
Probabilmente è inutile usare
varchar(11)
invece di solovarchar
otext
come tipo di parametro. (Si applicano eccezioni ai casi d'angolo.) -
Usa la citazione del dollaro, che è totalmente facoltativa qui, ma generalmente è un buon stile per citare il corpo della funzione. Prima o poi vorrai includere virgolette singole nel corpo.