使用eval函数返回表

时间:2015-01-07 02:38:53

标签: function postgresql plpgsql dynamic-sql

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

我已经创建了以下eval()功能,但它不能正常工作,因为我喜欢它。 我希望我的函数返回在函数中作为字符串引入的查询结果。该函数当前仅返回第一列(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 

但这基本上只是第一列的第一个值 - 我需要整个表格出现 - 换句话说 - 显示指示SELECT的结果。

1 个答案:

答案 0 :(得分:1)

像这样工作(但它没用):

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;

动态调用无法解决您的潜在问题: