在 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中带有临时表的存储函数

PostgreSQL 8.1 中的 SQL 函数“RETURNS TABLE”语法错误

函数如何将数组或设置值作为 PostgreSQL 中用户定义函数的参数 (IN)

用户定义的函数在sql中返回多个值

Oracle创建一个自定义函数,返回emp表的行数,请问哪位大神知道啊?

T-SQL编程 —— 用户自定义函数(标量函数)