如何在Firebird中评估数学表达式



我需要Firebird的一个函数来评估一个数学表达式并给出结果,我不知道是否有,现在我使用的是允许我这样做的foxpro-eval((表达式,但我想将所有计算集成在数据库中,而不必在数据库外进行计算。这适用于一个类似于电子表格的应用程序,操作员在其中输入加法、减法、乘法等,并且必须计算结果。

Firebird本身除了执行查询之外,没有其他类似的内置功能,使用它来计算表达式会使您容易受到SQL注入的攻击。

在它的基本形式中,你可以做一些类似的事情:

create function eval (formula varchar(1000))
returns double precision
as
declare result double precision;
begin
execute statement 'select (' || formula || ') from rdb$database' into result;
return result;
end

然后您可以执行为:

select eval('1 + 1') from rdb$database;

然而,考虑到它容易受到SQL注入的攻击(尽管execute statement的工作方式部分缓解了这种情况(,我不建议这样做。

另一种选择是自己编写(可能作为外部引擎/UDR(。或者,您需要为这样的解决方案找到(并可能付费(第三方。

相关内容

  • 没有找到相关文章

最新更新