我只是有一个表,其中包含一个名单的国家和他们的ISO国家代码。我的包裹查询在一个存储程序(又名功能),例如:

CREATE OR REPLACE FUNCTION get_countries(
                    ) RETURNS setof record AS $$
        SELECT country_code, country_name FROM country_codes
$$ LANGUAGE sql;

错我要的是:

ERROR:  a column definition list is required for functions returning "record"

我知道,我可以定义的类型和再循环通过记录集喜欢一个光标,但是,请参考有一个更好的方式来做到这在较新版本的PostgreSQL(我采用8.4.3)但是我拉我的头发,试图记住。


编辑:

这个工作:

CREATE OR REPLACE FUNCTION get_countries(
                    ) RETURNS setof country_codes AS $$
        SELECT country_code, country_name FROM country_codes
$$ LANGUAGE sql;

注意到"返回的[表的姓名]".但是它不似乎是最为灵活。它分崩离析,如果我试图返回加入的若干表格。

有帮助吗?

解决方案

您应该能够使用输出参数,如下所示:

CREATE OR REPLACE FUNCTION get_countries(country_code OUT text, country_name OUT text)
RETURNS setof record
AS $$ SELECT country_code, country_name FROM country_codes $$
LANGUAGE sql;

其他提示

也有选择的使用 RETURNS TABLE(...) (作为描述 在PostgreSQL Manual),我个人喜欢:

CREATE OR REPLACE FUNCTION get_countries()
RETURNS TABLE(
    country_code text,
    country_name text
)
AS $$
    SELECT country_code, country_name FROM country_codes
$$ LANGUAGE sql;

这同样有效使用 SETOF tablename, 但声明表结构内联,而不是引用现有的对象,因此联接,这样仍然会的工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top