За да разложите редовете, които получавате обратно от функцията, третирайте я като всяка друга таблица:
SELECT * FROM karta_pacjenta('foo45678901');
Функциите, връщащи набор от редове, се наричат още "таблични функции".
Освен това, това, което представихте, няма да работи.
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;
-
Единичните кавички за имена на колони са синтактична грешка. Трябва да има двойни кавички. По-добре обаче винаги да използвате имена без кавички, законни, малки букви.
-
Не цитирайте името на езика, това е идентификатор.
Останалото не е задължително, но е добър съвет.
-
Една проста SQL функция върши работата тук.
-
Използвайте изричен синтаксис JOIN. Същият резултат, но много по-лесен за поддръжка.
-
Вероятно е безсмислено да използвате
varchar(11)
вместо самоvarchar
илиtext
като тип параметър. (Прилагат се изключения за ъглови букви.) -
Използвайте котиране в долари - което е напълно незадължително тук, но като цяло е добър стил за цитиране на тялото на функцията. Рано или късно ще искате да включите единични кавички в тялото.