【问题标题】:Use an eval function to return table使用 eval 函数返回表
【发布时间】:2015-01-07 12:19:03
【问题描述】:

我有兴趣学习如何在 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 的结果。

【问题讨论】:

    标签: function postgresql plpgsql dynamic-sql


    【解决方案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;
    

    动态调用无法解决您的根本问题:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-10
      相关资源
      最近更新 更多