sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo obtener columnas individuales de la tabla devueltas por una función?

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 solo varchar o text 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.