我有一个存储过程,它进行非常复杂的连接并返回 1 行数据(使用 LIMIT 1)。然后,在我的应用程序中,我使用该数据进行一些计算。通过这种方式,我尝试将业务逻辑排除在存储过程之外。 但现在我需要在另一个存储函数中获取该数据来进行一些计算。我想创建存储函数的原因是因为它将在另一个返回数千行的查询中调用。
这可能吗?我不想在存储函数中重复复杂的连接逻辑...... 我看到的唯一解决方案是使用输出参数。
-----------------------------------
附言。我决定向你解释一下我的情况,也许你会给我另一个决定。
我需要计算 cargo 的交货完税价格(这是最终价格,包括包装、交货和清关)。这个交货完税价格的计算有点复杂,我不想在我的存储过程和函数中保留复杂的逻辑。因此,我创建了一个存储过程,选择计算价格所需的所有数据,并在应用程序中使用该数据来计算价格。目前一切正常。
但现在我需要创建一个包含交货税后价格的价目表,并且我们有数千种商品。因此,如果我为每一笔 cargo 调用我的存储过程,则将需要对服务器进行数千次往返(查询)。这就是为什么我想创建一个函数来调用存储过程并根据返回的数据计算价格。然后我想像这样使用它:
从价目表中选择描述、blablabla、重量、...、GetDeliveryDutyPaidPrice(...);
有什么想法吗?
最佳答案
不要使用存储过程,而是将其设为 View 。这应该可以解决您的问题。
编辑:
准确地说,您想要做的是创建一个 View ,其中包含您在计算中使用的所有列。 View 与存储过程类似,它允许底层数据库引擎优化其性能,但可以使用 WHERE 子句以与普通表相同的方式对其进行查询。因此,表的底层实现只能包含每个表所需的列(从而使架构变得简单),但 View 可以将不同表中的所有不同列组合成一个“ TableView ”,可以使用以下命令进行查询: WHERE 子句。通过这种方式,您可以获得存储过程的好处(针对常用的联接优化 SQL 联接),并能够适本地过滤结果(使用 WHERE 子句),同时仍将逻辑保留在数据库之外。
真的。风景是一件非常非常非常好的事情。使用它们。
关于MySQL:如何获取存储函数内存储过程的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/832180/