Para descomponer las filas que obtiene de la función, trátela como cualquier otra tabla:
SELECT * FROM karta_pacjenta('foo45678901');
Las funciones que devuelven un conjunto de filas también se denominan "funciones de tabla".
Aparte de eso, lo que presentaste no funcionaría.
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;
-
Las comillas simples para los nombres de las columnas son un error de sintaxis. Tendría que ser entre comillas dobles. Sin embargo, es mejor que siempre uses nombres legales en minúsculas sin comillas.
-
No cite el nombre del idioma, es un identificador.
El resto es opcional, pero buen consejo.
-
Una función SQL simple hace el trabajo aquí.
-
Utilice la sintaxis JOIN explícita. Mismo resultado, pero mucho más fácil de mantener.
-
Probablemente no tenga sentido usar
varchar(11)
en lugar de solovarchar
otext
como tipo de parámetro. (Se aplican excepciones de casos de esquina). -
Use cotizaciones en dólares, que es totalmente opcional aquí, pero generalmente es un buen estilo para citar el cuerpo de la función. Tarde o temprano querrá incluir comillas simples en el cuerpo.