Pour décomposer les lignes que vous récupérez de la fonction, traitez-les comme n'importe quelle autre table :
SELECT * FROM karta_pacjenta('foo45678901');
Les fonctions renvoyant un ensemble de lignes sont également appelées "fonctions de table".
En dehors de cela, ce que vous avez présenté ne fonctionnerait pas.
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;
-
Les guillemets simples pour les noms de colonne sont une erreur de syntaxe. Devraient être des guillemets doubles. Cependant, mieux vaut toujours utiliser des noms non cités, légaux et en minuscules.
-
Ne citez pas le nom de la langue, c'est un identifiant.
Le reste est facultatif, mais bon conseil.
-
Une simple fonction SQL fait le travail ici.
-
Utilisez la syntaxe JOIN explicite. Même résultat, mais beaucoup plus facile à entretenir.
-
Il est probablement inutile d'utiliser
varchar(11)
au lieu de simplementvarchar
outext
comme type de paramètre. (Des exceptions de casse d'angle s'appliquent.) -
Utilisez dollar-quoting - qui est totalement facultatif ici, mais généralement de bon style pour citer le corps de la fonction. Tôt ou tard, vous voudrez inclure des guillemets simples dans le corps.