2014-10-20 4 views
1

Я хочу создать функцию, которая возвращает все столбцы, скажем, 2 таблицы, которые объединены в запрос функции. Если бы это была только одна таблица, я мог бы просто использовать имя таблицы для определения типа возврата. Для большего количества таблиц единственный способ, которым я знаю, - это определить каждый столбец отдельно, что становится немного сложным, когда у меня много столбцов в таблицах. Есть ли способ сделать это проще?Функция, возвращающая все столбцы из более чем одной таблицы (PostgreSQL)

+0

Копирование имен столбцов из инструкции CREATE TABLE немного длиннее. Однако это не сложно. –

+0

Вы можете создать составной тип (или использовать 'RETURNS TABLE'), который * имеет * составные типы в качестве полей. Доступ к столбцам таблицы будет длиннее, но вам не нужно копировать столбцы (и их типы). + Изменения в структуре исходной таблицы будут немедленно отражены. + Дублированные имена столбцов разрешены * таким образом. – pozs

ответ

1

Вы можете создать представление и использовать его в качестве типа:

CREATE VIEW viewname AS select * from table1, table2, table3; 

Тогда это объявление функции будет работать:

CREATE FUNCTION multiple_tables(...) RETURNS SETOF viewname AS 
$$ 
    return select * from table1 join table2 on (...) join table3 on (...) WHERE ...; 
$$ language sql; 

RETURNS viewname без SETOF возможно тоже.

Функция будет зависеть от viewname, так что представление не может быть впоследствии структурно изменено без отказа от функции в первую очередь.

0

Для этого нет специальной функции.

Вы либо список всех столбцов в предложении RETURNS TABLE:

CREATE FUNCTION 
... 
RETURNS TABLE (col1 type1, col2 type2, ...) 
... 

Или вы создаете TYPE и использовать RETURNS SETOF ..

CREATE TAPE mytype (col1 type1, col2 type2, ...); 

... 
RETURNS SETOF mytype 
... 
Смежные вопросы