基于另一个公式的列计算 Table

Column calculation based on formula from another Table

例如,假设我们有一个table,它包含一个公式的id和一个公式本身。第二个 table 将具有值的 id 和值本身,它们将在公式中使用。

所以,有一个table,它连接公式和值,就像公式的模板。例如,公式#1 的结果将由值#5、#16 和#228 计算得出。

问题是:每个公式使用不同的值和不同的值以及不同的方式,但可以在不同的公式中使用相同的值。例如,公式#1 计算为#228 - #16 * #5,而公式#2 计算为#16 * #228 + #356.

这就引出了一个问题,有没有一种方法可以根据 select 语句和预定义的公式制作计算列?公式会手工写入数据库,不会生成,所以一个公式可以根据值IDS。

我还没有为我的项目选择数据库引擎,因为我很好奇是否有支持这种东西的引擎?

我在数据库方面略知一二,但缺乏专业知识,想请教一下这方面比较有经验的程序员

目前还不完全清楚您将如何找到实际的公式和输入参数。但是您可以编写一个 PL/pgSQL 函数,将给定的输入字符串计算为 SQL 表达式:

create function eval(p_formula text, variadic parameters numeric[])
  returns numeric
as
$$
declare
  l_result numeric;
  l_sql text;
begin
  for idx  in 1..cardinality(parameters)  loop
    p_formula := replace(p_formula, concat('$', idx), parameters[idx]::text);
  end loop;
  execute 'select '||p_formula
     into l_result;
  return l_result;
end;  
$$
language plpgsql;

然后select eval(' * + ', 3, 4, 5)returns17

但是上面的函数对于没有传递参数的问题并不宽容。使用公式 + - 你必须至少传递 6 个参数,否则会抛出错误。