MySQL存储过程中的参数

时间:2012-09-17 17:22:44

标签: mysql stored-procedures

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

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

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

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

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

提前感谢您的帮助!

2 个答案:

答案 0 :(得分: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似乎做了你想要做的事情   很难,这可能是你的设计需要另一种外观   设计的案例方面需要重复多个ad hoc   缺失。

     

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

答案 1 :(得分:1)

使用存储过程有很多很好的理由。这里列出了一些an article。希望这将解决“专业化”问题。

至于参数的传递,我认为你不能拥有变量列表。

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

至于“效率”,取决于你的定义。存储过程可能会有轻微的速度优势,但我不担心。你的意思是什么?