sql >> Databáze >  >> RDS >> PostgreSQL

Jak získat jednotlivé sloupce z tabulky vrácené z funkce?

Chcete-li rozložit řádky, které získáte z funkce, zacházejte s nimi jako s jakoukoli jinou tabulkou:

SELECT * FROM karta_pacjenta('foo45678901');

Funkce vracející sadu řádků se také nazývají "tabulkové funkce".

Kromě toho by to, co jste předložili, nefungovalo.

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;
  • Jednoduché uvozovky pro názvy sloupců jsou syntaktická chyba. Musely by to být dvojité uvozovky. Raději však vždy používejte jména bez uvozovek, legální, malá písmena.

  • Neuvádějte název jazyka, je to identifikátor.

Zbytek je volitelný, ale dobrá rada.

  • Tu zastane jednoduchá funkce SQL.

  • Použijte explicitní syntaxi JOIN. Stejný výsledek, ale mnohem jednodušší na údržbu.

  • Je pravděpodobně zbytečné používat varchar(11) namísto pouhého varchar nebo text jako typ param. (Platí výjimka pro rohová velká písmena.)

  • Použijte dolarové citace – což je zde zcela volitelné, ale obecně dobrý styl pro citování těla funkce. Dříve nebo později budete chtít do těla vložit jednoduché uvozovky.




  1. Odstraňte objekty uvnitř polí NESTED JSONB pomocí PostgreSQL

  2. Jak zjistit, zda byl aktualizační dotaz MySQL úspěšný, když jsou data předaná v dotazu stejná jako data již v databázi?

  3. proxy ponožky mysql

  4. při vložení perského znaku do Oracle db vidím otazník