Postgres не поддерживает переменные таблицы. Если вы можете передать некоторый реляционный контент, то а) вы можете использовать временную таблицу или б) вы можете передать массив составных значений:
CREATE TYPE branch_type AS
(
object_id int,
parent_id int,
name text
)
CREATE OR REPLACE FUNCTION build_org_branch(IN p_org_id organization.org_id%type,
IN p_padding text)
RETURNS branch_type[] AS ...
и затем вы можете написать
declare
l_table branch_type[];
begin
l_table := build_org_branch(1, ' ');
if l_table is not null then
-- do stuff with table rows
end if;
end;
Это присвоение массива массиву. Таблица к массиву также возможна, но всегда она должна быть набрана c.
CREATE OR REPLACE FUNCTION build_org_branch(IN p_org_id organization.org_id%type,
IN p_padding text)
RETURNS SETOF branch_type AS ...
и обработка:
declare
l_table branch_type[];
begin
l_table := ARRAY(SELECT build_org_branch(1, ' '));
if l_table is not null then
-- do stuff with table rows
end if;
end;
Для меньшего количества строк (до десяти тысяч) массив должен быть предпочтительным. Для большого количества строк следует использовать временную таблицу.