在Postgresql中返回一行但包含其他列
我想创建一个函数,它返回一个表的一行,但可以与其他表中的一些附加列连接。我该怎么做?我应该声明一个新类型吗?还是应该返回表类型?使用在Postgresql中返回一行但包含其他列,sql,postgresql,Sql,Postgresql,我想创建一个函数,它返回一个表的一行,但可以与其他表中的一些附加列连接。我该怎么做?我应该声明一个新类型吗?还是应该返回表类型?使用返回表并枚举原始表的所有列以及所有新列 看 或者,您也可以返回表类型加上额外的列,从而生成复合类型字段,例如 RETURNS TABLE (tablerow table_type, extracol1 integer, extracol2 text) 不能返回表的复合类型的值,因为这样就无法添加其他列 你可以: 声明包含要返回的列的新复合类型,或 返回没有任何固定
返回表
并枚举原始表的所有列以及所有新列
看
或者,您也可以返回表类型加上额外的列,从而生成复合类型字段,例如
RETURNS TABLE (tablerow table_type, extracol1 integer, extracol2 text)
不能返回表的复合类型的值,因为这样就无法添加其他列 你可以:
CREATE TABLE a(id SERIAL PRIMARY KEY, foo TEXT, bar INT);
CREATE TABLE b(id SERIAL PRIMARY KEY, aid INT, baz TEXT);
INSERT INTO a(foo,bar) VALUES('apples', 25);
INSERT INTO b(aid, baz) VALUES(1, 'bananas');
CREATE OR REPLACE FUNCTION TEST(p_id INT) RETURNS SETOF RECORD AS $$
BEGIN
RETURN QUERY SELECT a.id,foo,bar,baz FROM a LEFT JOIN b ON a.id=b.aid WHERE A.ID=p_id;
END;
$$ LANGUAGE plpgsql;
如果您天真地尝试这样使用它:
psql=> SELECT * FROM TEST(1);
ERROR: a column definition list is required for functions returning "record"
LINE 1: SELECT * FROM TEST(1);
^
psql=> SELECT * FROM TEST(1) AS test(id int, foo text, bar int, baz text);
id | foo | bar | baz
----+--------+-----+---------
1 | apples | 25 | bananas
(1 row)
实际上,每次要调用它时,都必须指定一个列定义列表,如下所示:
psql=> SELECT * FROM TEST(1);
ERROR: a column definition list is required for functions returning "record"
LINE 1: SELECT * FROM TEST(1);
^
psql=> SELECT * FROM TEST(1) AS test(id int, foo text, bar int, baz text);
id | foo | bar | baz
----+--------+-----+---------
1 | apples | 25 | bananas
(1 row)
因此,如果这是您的预期用例,那么我建议您遵循。您可以更好地解释您的问题,向我们展示您的尝试。请阅读,这里是一个学习如何提高你的问题质量和获得更好答案的好地方。@JuanCarlosOropeza,什么不清楚?不清楚,你也没有表现出任何努力,即使你知道一些关于新类型和表格类型的知识。看来这是个懒惰的问题。@JuanCarlosOropeza,什么努力?这里没有什么可展示的。我的意思是你没有展示你尝试过的东西。这不是
do it for me
站点。你尝试了一些事情,陷入困境,寻求帮助,我们会教你什么是错的。