För att dekomponera raderna du får tillbaka från funktionen behandla den som vilken annan tabell som helst:
SELECT * FROM karta_pacjenta('foo45678901');
Funktioner som returnerar en uppsättning rader kallas också "tabellfunktioner".
Bortsett från det skulle det du presenterade inte fungera.
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;
-
Enstaka citattecken för kolumnnamn är ett syntaxfel. Måste vara dubbla citattecken. Det är bättre att du alltid använder namn utan citat, lagliga, gemener.
-
Citera inte språknamnet, det är en identifierare.
Resten är valfritt, men bra råd.
-
En enkel SQL-funktion gör jobbet här.
-
Använd explicit JOIN-syntax. Samma resultat, men mycket lättare att underhålla.
-
Det är förmodligen meningslöst att använda
varchar(11)
istället för baravarchar
ellertext
som paramtyp. (Undantag från hörnfall gäller.) -
Använd dollar-citering - vilket är helt valfritt här, men generellt bra stil för att citera funktionskroppen. Förr eller senare vill du inkludera enstaka citattecken i brödtexten.