15

如何将简单的选择查询转换为select * from customerspg 中的存储过程/函数?

我是 Postgres 的新手,create function customers() as returns table/setof只是感觉不对,因此这里有问题。

我知道 procs 在 pg 领域被称为“函数”。因此create procedure不存在,我唯一的选择是创建视图或函数。问题是create function x() returns setof y返回一个以逗号分隔的值行,如果没有进一步处理就无法使用(至少这是我在 pgAdmin 和 Ruby/Sequel 中看到的)。

create function x() returns table(...)需要我嵌入我不想嵌入的行定义。

我确信这一切背后都有一个原因,但令我惊讶的是,最常见的用例就是这么棘手。

4

2 回答 2

19

未经测试,但应该是正确的:

CREATE OR REPLACE FUNCTION getcustomers() RETURNS SETOF customers AS $$
SELECT * FROM customers;
$$ LANGUAGE sql;
于 2013-01-06T04:02:34.737 回答
18

问题是“创建函数x()返回setof y”返回一个paren'd逗号分隔的行值,如果没有进一步处理就不能使用

该函数返回一行。要分解为单独的列,请使用以下命令调用它:

SELECT * FROM getcustomers();

这是假设函数定义了正确的返回类型。看:

手册CREATE FUNCTION应该是一个很好的起点。示例部分涵盖了这个主题。

于 2013-01-06T18:35:23.947 回答