什么是最简单的方式返回记录集从PostgreSQL存储程序?
-
19-09-2019 - |
题
我只是有一个表,其中包含一个名单的国家和他们的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
, 但声明表结构内联,而不是引用现有的对象,因此联接,这样仍然会的工作。
不隶属于 StackOverflow