Chcete-li rozložit řádky, které získáte z funkce, zacházejte s nimi jako s jakoukoli jinou tabulkou:
SELECT * FROM karta_pacjenta('foo45678901');
Funkce vracející sadu řádků se také nazývají "tabulkové funkce".
Kromě toho by to, co jste předložili, nefungovalo.
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;
-
Jednoduché uvozovky pro názvy sloupců jsou syntaktická chyba. Musely by to být dvojité uvozovky. Raději však vždy používejte jména bez uvozovek, legální, malá písmena.
-
Neuvádějte název jazyka, je to identifikátor.
Zbytek je volitelný, ale dobrá rada.
-
Tu zastane jednoduchá funkce SQL.
-
Použijte explicitní syntaxi JOIN. Stejný výsledek, ale mnohem jednodušší na údržbu.
-
Je pravděpodobně zbytečné používat
varchar(11)
namísto pouhéhovarchar
nebotext
jako typ param. (Platí výjimka pro rohová velká písmena.) -
Použijte dolarové citace – což je zde zcela volitelné, ale obecně dobrý styl pro citování těla funkce. Dříve nebo později budete chtít do těla vložit jednoduché uvozovky.