sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan får man individuelle kolonner fra tabel returneret fra en funktion?

For at dekomponere rækkerne, du får tilbage fra funktionen, skal du behandle den som enhver anden tabel:

SELECT * FROM karta_pacjenta('foo45678901');

Funktioner, der returnerer et sæt rækker, kaldes også "tabelfunktioner".

Bortset fra det, ville det, du præsenterede, ikke fungere.

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;
  • Enkelte anførselstegn for kolonnenavne er en syntaksfejl. Det skal være dobbelte anførselstegn. Det er dog bedre, at du altid bruger ikke-citerede, lovlige navne med små bogstaver.

  • Angiv ikke sprogets navn, det er en identifikator.

Resten er valgfrit, men et godt råd.

  • En simpel SQL-funktion gør jobbet her.

  • Brug eksplicit JOIN-syntaks. Samme resultat, men meget nemmere at vedligeholde.

  • Det er sandsynligvis meningsløst at bruge varchar(11) i stedet for bare varchar eller text som param type. (Hjørnetilfælde-undtagelser gælder.)

  • Brug dollar-citering - hvilket er helt valgfrit her, men generelt god stil til at citere funktionsteksten. Før eller siden vil du gerne inkludere enkelte anførselstegn i brødteksten.




  1. Hvad er databasedeling?

  2. Kørsel af en MariaDB Galera Cluster uden Orchestration Tools - DB Container Management:Anden del

  3. pgAdmin - Deling af DB-forbindelsesdefinitioner

  4. MySql-fejl 150 - Fremmednøgler