我想用输入参数创建一个MySQL存储过程(SP)。
但是,在写入SP时无法确定参数的数量。 (场景是用户将有多个选项可供选择。所选的选项将形成搜索条件:
select ...
where prod_category = option1 && option2 && option3 &&...
因此,如果有人只选择option1和option2,则只会发送2个参数。有时可能会选择50多个选项,因此必须发送50多个参数。)
所以,我有3个问题: 1.我可以使用MySQL存储过程(SP)处理这种情况吗? 2. SP是处理此类情况的专业方式吗? 3.如果SP不是处理这些场景的专业方法,那么还有什么能够有效地处理这些搜索吗?搜索是我的应用程序的核心功能。
提前感谢您的帮助!
答案 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然后将其传递给过程)。
至于“效率”,取决于你的定义。存储过程可能会有轻微的速度优势,但我不担心。你的意思是什么?