For at dekomponere rækkerne, du får tilbage fra funktionen, skal du behandle den som enhver anden tabel:
SELECT * FROM karta_pacjenta('foo45678901');
Funktioner, der returnerer et sæt rækker, kaldes også "tabelfunktioner".
Bortset fra det, ville det, du præsenterede, ikke fungere.
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;
-
Enkelte anførselstegn for kolonnenavne er en syntaksfejl. Det skal være dobbelte anførselstegn. Det er dog bedre, at du altid bruger ikke-citerede, lovlige navne med små bogstaver.
-
Angiv ikke sprogets navn, det er en identifikator.
Resten er valgfrit, men et godt råd.
-
En simpel SQL-funktion gør jobbet her.
-
Brug eksplicit JOIN-syntaks. Samme resultat, men meget nemmere at vedligeholde.
-
Det er sandsynligvis meningsløst at bruge
varchar(11)
i stedet for barevarchar
ellertext
som param type. (Hjørnetilfælde-undtagelser gælder.) -
Brug dollar-citering - hvilket er helt valgfrit her, men generelt god stil til at citere funktionsteksten. Før eller siden vil du gerne inkludere enkelte anførselstegn i brødteksten.