我只有一张表格,其中包含国家/地区列表及其国家/地区代码。我将查询包装在存储过程(也称为函数)中,例如:
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"
我知道我可以定义一个TYPE,然后像游标一样循环遍历记录集,但是IIRC有更好的方法在较新版本的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;
请注意“RETURNS setof [table name]”。但它似乎并不是最灵活的。如果我尝试返回多个表的连接,它就会崩溃。
答案 0 :(得分:12)
还可以选择使用RETURNS TABLE(...)
(如in the 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
相同,但是声明表结构内联而不是引用现有对象,因此连接等仍然可以工作。
答案 1 :(得分:10)
您应该能够使用输出参数,如下所示:
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;