Я пишу SP, используя PL/pgSQL.
Я хочу вернуть запись, состоящую из полей из нескольких разных таблиц. Может выглядеть примерно так:
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 (
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