使用 eval 函数 return table
Use an eval function to return table
我有兴趣学习如何在 Postgres 中使用动态函数。我基本上需要一个动态函数,它将吐出一个 table 或一个 subtable (从现有 table 中选择的一些列)。
我创建了以下 eval()
函数,但它没有像我希望的那样工作。
我希望我的函数 return 作为函数中的字符串引入的查询结果。该函数目前 return 仅提供第一列中的第一个值 (enrich_d_dkj_p_k27ac
)。看来我应该将 returns
从 text
更改为其他内容?
create or replace function eval() returns text
as
$body$
declare
result text;
begin
execute 'select enrich_d_dkj_p_k27ac,enrich_lr_dkj_p_k27ac,enrich_r_dkj_p_k27ac
from dkj_p_k27ac' into result;
return result;
end;
$body$
language plpgsql;
SELECT eval();
结果是:
eval text
2.4
但这基本上只是第一列的第一个值 - 我需要整个 table 出现 - 或者换句话说 - 指示的 SELECT
.[= 的结果9=]
它会像这样工作(但没用):
create or replace function eval()
RETURNS TABLE (enrich_d_dkj_p_k27ac text -- replace with actual column types
, enrich_lr_dkj_p_k27ac text
, enrich_r_dkj_p_k27ac text) AS
$func$
begin
RETURN QUERY EXECUTE
'select enrich_d_dkj_p_k27ac,enrich_lr_dkj_p_k27ac,enrich_r_dkj_p_k27ac
from dkj_p_k27ac';
end
$func$ language plpgsql;
致电:
SELECT * FROM eval();
不需要eval()
函数,直接执行语句即可:
select enrich_d_dkj_p_k27ac,enrich_lr_dkj_p_k27ac,enrich_r_dkj_p_k27ac
from dkj_p_k27ac;
动态调用无法解决您的底层问题:
我有兴趣学习如何在 Postgres 中使用动态函数。我基本上需要一个动态函数,它将吐出一个 table 或一个 subtable (从现有 table 中选择的一些列)。
我创建了以下 eval()
函数,但它没有像我希望的那样工作。
我希望我的函数 return 作为函数中的字符串引入的查询结果。该函数目前 return 仅提供第一列中的第一个值 (enrich_d_dkj_p_k27ac
)。看来我应该将 returns
从 text
更改为其他内容?
create or replace function eval() returns text
as
$body$
declare
result text;
begin
execute 'select enrich_d_dkj_p_k27ac,enrich_lr_dkj_p_k27ac,enrich_r_dkj_p_k27ac
from dkj_p_k27ac' into result;
return result;
end;
$body$
language plpgsql;
SELECT eval();
结果是:
eval text
2.4
但这基本上只是第一列的第一个值 - 我需要整个 table 出现 - 或者换句话说 - 指示的 SELECT
.[= 的结果9=]
它会像这样工作(但没用):
create or replace function eval()
RETURNS TABLE (enrich_d_dkj_p_k27ac text -- replace with actual column types
, enrich_lr_dkj_p_k27ac text
, enrich_r_dkj_p_k27ac text) AS
$func$
begin
RETURN QUERY EXECUTE
'select enrich_d_dkj_p_k27ac,enrich_lr_dkj_p_k27ac,enrich_r_dkj_p_k27ac
from dkj_p_k27ac';
end
$func$ language plpgsql;
致电:
SELECT * FROM eval();
不需要eval()
函数,直接执行语句即可:
select enrich_d_dkj_p_k27ac,enrich_lr_dkj_p_k27ac,enrich_r_dkj_p_k27ac
from dkj_p_k27ac;
动态调用无法解决您的底层问题: