如何评估 MySQL 存储的_function_ 中的简单数学公式?

Posted

技术标签:

【中文标题】如何评估 MySQL 存储的_function_ 中的简单数学公式?【英文标题】:How do I eval a simple math formula inside a MySQL stored _function_? 【发布时间】:2011-09-07 09:27:29 【问题描述】:

在我存储的函数里面我有:

formula := "(10+10 * 1000)/12";

(一个简单的数学公式,只有数字,动态创建为字符串)

如何评估并返回结果?

我不能使用 EXECUTE(不可能在存储函数中使用),如果我将其设为存储过程并从存储函数中调用它,我会得到“存储函数或触发器中不允许使用动态 SQL”-好像我会直接在函数内部进行评估。 我需要一个存储函数,而不是过程,因为我需要在 SELECT 语句中调用它。

【问题讨论】:

【参考方案1】:

我看不出使用公式能给你带来什么。如果您正在编写存储过程,请输入公式并忘记字符串。

我不认为让存储过程动态化,在这种情况下,被评估的公式必须在每次调用中发生变化。

如果必须,您必须编写一个解析器来将该字符串分解为其组成部分,创建一个解析树,然后遍历该树来评估它。这不是一个小问题。我会重新考虑这一点。

【讨论】:

公式保存在数据库中。我不能只输入公式...创建解析树确实不是一件容易的事,尤其是作为 mysql 函数 :) 糟糕的设计,在我看来。也许您应该考虑将该功能放在中间层。 不是一个糟糕的设计,而是一个必要的设计:)【参考方案2】:

显然没有解决办法。 我在 php 中应用了“paintfull”解决方法,因为它不是问题的主题,所以我不会在这里展示。

【讨论】:

以上是关于如何评估 MySQL 存储的_function_ 中的简单数学公式?的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL进阶学习笔记四:MySQL存储过程之定义条件,处理过程及存储过程的管理!(视频序号:进阶_11,12)

存储的 FUNCTION 没有在 MySql 中返回结果?

mysql利用存储过程插入大量数据脚本

mysql利用存储过程插入大量数据脚本

尝试使用 Diesel 查询时溢出评估要求`_:Sized`

.NET IL / MSIL 评估堆栈基础