Om de rijen die u terugkrijgt van de functie te ontleden, behandelt u deze als elke andere tabel:
SELECT * FROM karta_pacjenta('foo45678901');
Functies die een reeks rijen retourneren, worden ook "tabelfuncties" genoemd.
Afgezien daarvan zou wat je presenteerde niet werken.
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;
-
Enkele aanhalingstekens voor kolomnamen zijn een syntaxisfout. Zouden dubbele aanhalingstekens moeten zijn. Het is echter beter om altijd niet-geciteerde, legale namen in kleine letters te gebruiken.
-
Citeer de taalnaam niet, het is een identificatie.
De rest is optioneel, maar goed advies.
-
Een eenvoudige SQL-functie doet het werk hier.
-
Gebruik expliciete JOIN-syntaxis. Hetzelfde resultaat, maar veel gemakkelijker te onderhouden.
-
Het is waarschijnlijk zinloos om
varchar(11)
. te gebruiken in plaats van alleenvarchar
oftext
als paramtype. (Uitzonderingen voor hoekgevallen zijn van toepassing.) -
Gebruik citaten in dollars - wat hier volledig optioneel is, maar over het algemeen een goede stijl om de functietekst te citeren. Vroeg of laat wil je enkele aanhalingstekens in de hoofdtekst opnemen.