我有兴趣学习如何在Postgres中使用动态函数。我基本上需要一个动态函数,它会吐出一个表或一个子表(从现有表中选择几个列)。
我已经创建了以下eval()
功能,但它不能正常工作,因为我喜欢它。
我希望我的函数返回在函数中作为字符串引入的查询结果。该函数当前仅返回第一列(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
但这基本上只是第一列的第一个值 - 我需要整个表格出现 - 换句话说 - 显示指示SELECT
的结果。
答案 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;
动态调用无法解决您的潜在问题: