【发布时间】:2011-05-31 15:58:55
【问题描述】:
我正在使用 PL/pgSQL 编写一个 SP。
我想返回一条记录,该记录由几个不同表中的字段组成。可能看起来像这样:
CREATE OR REPLACE FUNCTION get_object_fields(name text)
RETURNS RECORD AS $$
BEGIN
-- fetch fields f1, f2 and f3 from table t1
-- fetch fields f4, f5 from table t2
-- fetch fields f6, f7 and f8 from table t3
-- return fields f1 ... f8 as a record
END
$$ language plpgsql;
如何将不同表中的字段作为单个记录中的字段返回?
[编辑]
我意识到我上面给出的例子有点过于简单了。我需要检索的一些字段将保存为正在查询的数据库表中的单独行,但我想以“扁平化”记录结构返回它们。
下面的代码应该有助于进一步说明:
CREATE TABLE user (id int, school_id int, name varchar(32));
CREATE TYPE my_type AS (
user1_id int,
user1_name varchar(32),
user2_id int,
user2_name varchar(32)
);
CREATE OR REPLACE FUNCTION get_two_users_from_school(schoolid int)
RETURNS my_type AS $$
DECLARE
result my_type;
temp_result user;
BEGIN
-- for purpose of this question assume 2 rows returned
SELECT id, name INTO temp_result FROM user where school_id = schoolid LIMIT 2;
-- Will the (pseudo)code below work?:
result.user1_id := temp_result[0].id ;
result.user1_name := temp_result[0].name ;
result.user2_id := temp_result[1].id ;
result.user2_name := temp_result[1].name ;
return result ;
END
$$ language plpgsql
【问题讨论】:
-
确实调查了返回多条记录,例如
returns setof my_type -
@nate:它不是返回集合的函数。我需要在 SP 内获取记录,然后从函数返回的数据中从检索集中的单个记录中检索字段 - 听起来比实际复杂 - 请参阅上面的代码
标签: sql postgresql stored-procedures types plpgsql