从PostgreSQL返回记录集存储过程中最简单的方法是什么?
技术问答
313 人阅读
|
0 人回复
|
2023-09-14
|
我只有一个表格,包括国家/地区及其表格ISO国家/地区代码列表。我将在存储过程(也称函数)中查询包装,例如:7 S+ }( W4 G6 ?& d. b$ k
CREATE OR REPLACE FUNCTION get_countries RETURNS setof record AS $$ SELECT country_code,country_name FROM country_codes$$ LANGUAGE sql;我的错误是:$ n2 o/ l1 w+ f- ^, Y2 D
ERROR: a column definition list is required for functions returning "record"我知道我可以定义一个TYPE,然后像游标一样记录记录集,但是IIRC在更新版本中有更好的方法PostgreSQL(我用的是8.4.3)下面做这个操作,但我想尽办法记住。- F H9 @& h1 P J D; U9 t
编辑:
3 U% s7 i- @. u& W& ^0 C# j. F3 C' Q这有效:* @" l& |, [7 Z/ Z
CREATE OR REPLACE FUNCTION get_countries RETURNS setof country_codes AS $$ SELECT country_code,country_name FROM country_codes$$ LANGUAGE sql;注意“ RETURNS setof [表名]”。但这似乎不是最灵活的。如果我尝试返回多个表的联接,它就会崩溃。8 m# h! `: r4 Q5 _/ S* L
8 V, Z* {; d8 w+ V" j 解决方案:
% q9 F9 o: [2 ^- ]- |& R: t 如下所示,您应能够使用输出参数:; ?% T+ w* T2 O2 M5 k8 n' ~5 \, D
CREATE OR REPLACE FUNCTION get_countries(country_code OUT text,country_name OUT text)RETURNS setof recordAS $$ SELECT country_code,country_name FROM country_codes $$LANGUAGE sql; |
|
|
|
|
|