3

我想创建一个带有输入参数的 MySQL 存储过程 (SP)。

但是,在编写 SP 时无法确定参数的数量。(场景是用户将有多个选项可供选择。选择的选项将形成搜索条件:

select ... 
where prod_category = option1 && option2 && option3 &&...

因此,如果有人只选择 option1 和 option2,则只会发送 2 个参数。有时可能会选择 50 多个选项,因此必须发送 50 多个参数。)

所以,我有 3 个问题: 1. 我可以使用 MySQL 存储过程 (SP) 处理这样的场景吗?2. SP 是处理这种情况的专业方法吗?3.如果SP不是处理这些场景的专业方法,还有什么可以有效处理这些搜索的吗?搜索是我的应用程序的核心功能。

提前感谢您的帮助!

4

2 回答 2

2

MySQL 存储过程只接受固定数量的参数。您可以构建以单个字符串参数分隔的参数和值列表,然后在您的过程中处理它们,或者使用您的应用程序语言来构建查询。

来自http://forums.mysql.com/read.php?98,154749,155001#msg-155001

不,MySQL sprocs 只接受固定数量的参数。ISO SQL 在一定程度上针对正确的 RDBMS 逻辑进行了优化(除非您要询问 EF Codd、CJ Date 或 Fabian Pascal),但在许多方面 SQL 是相当字面的,所以如果 SQL 似乎使您尝试做的事情变得非常困难,它可能是您的设计需要重新审视,在这种情况下,需要重复多次临时删除的设计方面。

如果这样的删除是不可避免的,这里有三个选项。首先,在应用程序语言中构建删除查询以包含以逗号分隔的 ID 字符串。其次,将这样的字符串传递给使用这样的字符串准备查询的存储过程。第三,使用目标 ID 填充临时表并编写删除连接 ID 的简单连接查询。

于 2012-09-17T17:31:36.917 回答
1

使用存储过程有很多很好的理由。这是一篇文章,其中列出了一些。希望这将解决“专业”问题。

至于参数的传递,我不相信你可以有一个变量列表。

很久以前,我看到它通过将值写入表并让存储过程将它们读回“完成”。(在表中使用 session_id,然后将其传递给过程)。

至于“效率”,就看你的定义了。存储过程可能对速度有一点好处,但我不担心。你什么意思?

于 2012-09-17T17:31:38.093 回答