PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak pobrać poszczególne kolumny z tabeli zwróconej z funkcji?

Aby rozłożyć wiersze otrzymane z funkcji, traktuj je jak każdą inną tabelę:

SELECT * FROM karta_pacjenta('foo45678901');

Funkcje zwracające zestaw wierszy są również nazywane "funkcjami tabelowymi".

Poza tym to, co przedstawiłeś, nie działałoby.

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;
  • Pojedyncze cudzysłowy dla nazw kolumn są błędem składni. Musiałyby być podwójne cudzysłowy. Lepiej jednak zawsze używać niecytowanych, legalnych nazw małych liter.

  • Nie cytuj nazwy języka, to identyfikator.

Reszta jest opcjonalna, ale dobra rada.

  • Tutaj wystarczy prosta funkcja SQL.

  • Użyj jawnej składni JOIN. Ten sam wynik, ale znacznie łatwiejszy w utrzymaniu.

  • Prawdopodobnie nie ma sensu używać varchar(11) zamiast po prostu varchar lub text jako typ parametru. (Obowiązują wyjątki dla narożnych przypadków).

  • Używaj cudzysłowów w dolarach — co jest tutaj całkowicie opcjonalne, ale ogólnie dobrym stylem do cytowania treści funkcji. Wcześniej czy później będziesz chciał umieścić w treści pojedyncze cudzysłowy.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wykrywanie języka za pomocą danych w PostgreSQL

  2. JDBC Gotowy parametr instrukcji wewnątrz json

  3. Zapytanie Postgresql 9.4 staje się coraz wolniejsze podczas dołączania do TSTZRANGE za pomocą &&

  4. Jak eksportować pliki pełnotekstowe za pomocą SQL?

  5. Jak połączyć dwie tabele, z których jedna nie ma klucza podstawowego i nie ma tej samej długości znaków?