PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да получите отделни колони от таблица, върнати от функция?

За да разложите редовете, които получавате обратно от функцията, третирайте я като всяка друга таблица:

SELECT * FROM karta_pacjenta('foo45678901');

Функциите, връщащи набор от редове, се наричат ​​още "таблични функции".

Освен това, това, което представихте, няма да работи.

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;
  • Единичните кавички за имена на колони са синтактична грешка. Трябва да има двойни кавички. По-добре обаче винаги да използвате имена без кавички, законни, малки букви.

  • Не цитирайте името на езика, това е идентификатор.

Останалото не е задължително, но е добър съвет.

  • Една проста SQL функция върши работата тук.

  • Използвайте изричен синтаксис JOIN. Същият резултат, но много по-лесен за поддръжка.

  • Вероятно е безсмислено да използвате varchar(11) вместо само varchar или text като тип параметър. (Прилагат се изключения за ъглови букви.)

  • Използвайте котиране в долари - което е напълно незадължително тук, но като цяло е добър стил за цитиране на тялото на функцията. Рано или късно ще искате да включите единични кавички в тялото.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ecto Query - Дати + Интервали на Postgres + Интерполация на заявки

  2. Календарни таблици в PostgreSQL 9

  3. PostgreSQL заявките не са унищожени при изключване на сървъра на приложения

  4. предложете инструмент postgres за намиране на разликата между схемата и данните

  5. Как мога да използвам индекс на разделена таблица в postgresql 8.3.7