MySQL中存储过程的命名参数

5
我能使用MySQL中的命名参数来调用存储过程吗?我需要像这样调用存储过程:
CALL stored_procedure(@param1 = "foo1", @param2 = "foo2");

答案是

CALL stored_procedure(@param1 := "foo1", @param2 := "foo2");

感谢Pentium10。
2个回答

9

MySQL存储过程不支持任意顺序的命名参数。例如,该功能请求在过去已经被提出:

正如您发现的那样,使用表达式设置会话变量的解决方法与参数顺序无关。换句话说,您可以执行以下操作:

CALL stored_procedure(@param1 := "foo1", @param2 := "foo2");

但是值 "foo1" 和 "foo2" 仍然分别是第一个和第二个参数。

如果您想要更多的灵活性,我建议您编写存储过程不接受任何参数,而是直接使用会话变量。

SET @param1 := "foo1", @param2 := "foo2";
CALL stored_procedure();

在您的过程中,您必须使用@param1@param2等变量引用这些变量。

CREATE PROCEDURE stored_procedure()
BEGIN
    SELECT * FROM mytable WHERE col1 = @param1 AND col2 = @param2;
END

请阅读 http://dev.mysql.com/doc/refman/5.7/en/user-variables.html,了解关于MySQL用户变量的内容。

5
这在正式情况下是不可能的。但有一个可行的解决方案。使用以下内容:
CALL prcInsertStuff ( 
@paramName1 := nameValue1 
, @paramValue1 := paramValue1 
); 

抱歉,Pentium10,这对我没有帮助。我需要真正的命名参数。无论如何,谢谢你。 - Worker
你不能这样做。但是你可以将名称和变量作为一对传递。 - Pentium10
啊!我看到了!这看起来好多了。请给我几秒钟进行测试 :-) - Worker
我必须修改我的存储过程调用为:CALL stored_procedure(@param1 := "foo1", @param2 := "foo2"); - Worker
3
我尝试了上面的回答,但它仍然按照存储过程中定义参数的顺序排序参数,而不管你给它们起什么名字。 - KthProg
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接