PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como obter colunas individuais da tabela retornadas de uma função?


Para decompor as linhas que você recebe da função, trate-a como qualquer outra tabela:
SELECT * FROM karta_pacjenta('foo45678901');

As funções que retornam um conjunto de linhas também são chamadas de "funções de tabela".

Além disso, o que você apresentou não funcionaria.
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;

  • Aspas simples para nomes de coluna são um erro de sintaxe. Teria que ser aspas duplas. É melhor você sempre usar nomes sem aspas, legais e em minúsculas.

  • Não cite o nome do idioma, é um identificador.

O resto é opcional, mas bom conselho.

  • Uma função SQL simples faz o trabalho aqui.

  • Use a sintaxe JOIN explícita. Mesmo resultado, mas muito mais fácil de manter.

  • Provavelmente é inútil usar varchar(11) em vez de apenas varchar ou text como tipo de parâmetro. (Exceções de caso de canto se aplicam.)

  • Use cotação de dólar - que é totalmente opcional aqui, mas geralmente um bom estilo para citar o corpo da função. Mais cedo ou mais tarde você vai querer incluir aspas simples no corpo.