使用 eval 函数 return table

Use an eval function to return table

我有兴趣学习如何在 Postgres 中使用动态函数。我基本上需要一个动态函数,它将吐出一个 table 或一个 subtable (从现有 table 中选择的一些列)。

我创建了以下 eval() 函数,但它没有像我希望的那样工作。 我希望我的函数 return 作为函数中的字符串引入的查询结果。该函数目前 return 仅提供第一列中的第一个值 (enrich_d_dkj_p_k27ac)。看来我应该将 returnstext 更改为其他内容?

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;

动态调用无法解决您的底层问题: