У меня есть простой пользовательский определенную функцию следующим образом:В Plpgsql, как использовать пользовательскую функцию в другой заданной пользователем функции
create or replace function test()
returns table (a float, b float) as
$$
begin
drop table if exists test1;
create table test1(a float, b float);
insert into test1 values(1,1),(2,1),(3,3);
return query select * from test1;
end;
$$ language plpgsql;
У меня есть еще определенная пользователем функция. В этом случае я хочу вызвать функцию выше.
create or replace function test2()
returns table (a float) as
$$
begin
select test();
return query select a+b from test1;
end;
$$language plpgsql;
после этого, когда я делаю:
select test2();
Это дает мне ошибку:
query has no destination for result data.
Если я свою вторую функцию следующим образом:
create or replace function test2()
returns table (a float) as
$$
select a+b from test();
$$language sql;
Тогда я делаю select test2();
Он работает правильно. Я думаю, причина в том, что это не работает, когда я возвращаю что-то из функции sql, он возвращает таблицу, но когда я возвращаю что-то из функции plpgsql, он возвращает что-то похожее на кортеж. Например, (1,2). 1 будет первым атрибутом таблицы, 2 будет вторым. Это просто простой пример, я могу использовать sql вместо plpgsql для решения этой проблемы. Однако в моем реальном проекте я действительно хочу вызвать функцию plpgsql в другой функции plpgsql.
Тогда основная структура моей программы будет выглядеть следующим образом:
plpgsql function 1
plpgsql function 2
plpgsql function 3
В моей главной функции plpgsql, я хочу назвать все эти три функции. Кто-нибудь имеет представление о том, как это сделать?
Спасибо. он будет выполняться из (функции). –