在 PostgreSQL 中返回表的用户定义函数
Posted
技术标签:
【中文标题】在 PostgreSQL 中返回表的用户定义函数【英文标题】:User Defined Functions returning Tables in PostgreSQL 【发布时间】:2014-02-16 00:26:35 【问题描述】:我正在尝试创建一个 UDF,它返回一个包含四个值的表:
CREATE TABLE ts_table
(
id character varying,
year integer,
rank double precision,
votes integer
);
然后,使用 UDF,我必须返回一个由(类似于以下内容)定义的表:
CREATE FUNCTION ts_myfunc(text) RETURNS SETOF ts_table AS $$
'SELECT id,year,rank,votes FROM productions NATURAL JOIN directors NATURAL JOIN ratings WHERE attr is NULL AND pid=$1 ORDER BY year;'
$$ LANGUAGE SQL;
但是,当我尝试使用该命令创建 UDF 时,我得到了
ERROR: syntax error at or near "'SELECT id,year,rank,votes FROM productions NATURAL JOIN directors NATURAL JOIN ratings WHERE attr is NULL AND pid=$1 ORDER BY year;'"
LINE 2: 'SELECT id,year,rank,votes FROM productions NATURAL JOIN dir...
【问题讨论】:
阅读"dollar-quoting"。这个密切相关的问题可能会有所帮助:***.com/questions/12144284/… @ErwinBrandstetter 谢谢,我注意到我的错误有点太晚了,但我想我会把它作为未来类似问题的答案。 【参考方案1】:换行
'SELECT id,year,rank,votes FROM productions NATURAL JOIN directors NATURAL JOIN ratings WHERE attr is NULL AND pid=$1 ORDER BY year;'
到
SELECT id,year,rank,votes FROM productions NATURAL JOIN directors NATURAL JOIN ratings WHERE attr is NULL AND pid=$1 ORDER BY year;
(删除单引号)将解决问题。
【讨论】:
以上是关于在 PostgreSQL 中返回表的用户定义函数的主要内容,如果未能解决你的问题,请参考以下文章
PostgreSQL 8.1 中的 SQL 函数“RETURNS TABLE”语法错误
函数如何将数组或设置值作为 PostgreSQL 中用户定义函数的参数 (IN)