繁体   English   中英

如何从函数返回的表中获取单个列?

[英]How to get individual columns from table returned from a function?

我正在尝试使用returns表创建一个函数。

CREATE  FUNCTION karta_pacjenta(pe VARCHAR(11))
  RETURNS TABLE('data' DATE,'imie' TEXT, 'nazwisko' TEXT, 'diagnoza' TEXT,'przepisany lek' TEXT)  AS'  
BEGIN
 RETURN QUERY SELECT w.dzien AS dzien,p.imie, p.nazwisko, ch.nazwa, l.nazwa
 FROM pacjenci p, diagnozy d, choroby ch, wizyty w, leki l, recepty r
 WHERE p.pesel=d.pesel AND d.kod_choroby=ch.kod_choroby AND p.pesel=pe AND w.pesel=pe AND l.kod_leku=r.kod_leku AND r.nr_wizyty=w.nr_wizyty;
END;
' LANGUAGE 'plpgsql';

它工作得很好,但是我还需要一件事。 作为此函数的结果,我得到了函数名称,然后是几条记录。

但是,我想在记录中使用列名。 任何想法如何做到这一点?

要分解从函数返回的行,请像对待其他任何表一样对待它:

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)代替varchartext作为参数类型可能毫无意义。 (适用例外情况。)

  • 使用美元报价-这里完全是可选的,但是通常很好的风格来报价功能主体。 或早或晚,您都希望在正文中包含单引号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM