回答

收藏

从PostgreSQL返回记录集存储过程中最简单的方法是什么?

技术问答 技术问答 152 人阅读 | 0 人回复 | 2023-09-14

我只有一个表格,包括国家/地区及其表格ISO国家/地区代码列表。我将在存储过程(也称函数)中查询包装,例如:. j: G4 ]2 F4 d9 E6 h3 ~- T
CREATE OR REPLACE FUNCTION get_countries               RETURNS setof record AS $$        SELECT country_code,country_name FROM country_codes$$ LANGUAGE sql;我的错误是:5 I$ |& r5 \' ?2 o! \; w4 v% ~
ERROR:  a column definition list is required for functions returning "record"我知道我可以定义一个TYPE,然后像游标一样记录记录集,但是IIRC在更新版本中有更好的方法PostgreSQL(我用的是8.4.3)下面做这个操作,但我想尽办法记住。2 V$ J9 M' T! A
编辑:- J/ @' |6 U7 a0 f7 ?
这有效:
; [  g/ K6 a, v& t0 v: rCREATE OR REPLACE FUNCTION get_countries               RETURNS setof country_codes AS $$        SELECT country_code,country_name FROM country_codes$$ LANGUAGE sql;注意“ RETURNS setof [表名]”。但这似乎不是最灵活的。如果我尝试返回多个表的联接,它就会崩溃。
" f# w4 g8 a+ R4 L" \3 o* H' s                                                                + _$ d, k* c4 C0 ^/ V
    解决方案:                                                               
6 x: `' P& J, A7 P6 W8 F% K8 J                                                                如下所示,您应能够使用输出参数:
* X( |/ o8 W6 {3 S8 V0 [8 oCREATE 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;
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则