MySQL中存储过程的命名参数

时间:2010-11-22 12:47:06

标签: mysql stored-procedures

我可以在MySQL中为存储过程使用命名参数吗?我需要调用这样的存储过程:

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

答案是

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

感谢Pentium10。

2 个答案:

答案 0 :(得分:5)

这是不可能正式的。

但是有一种解决方法可以提供帮助。使用此:

CALL prcInsertStuff ( 
@paramName1 := nameValue1 
, @paramValue1 := paramValue1 
); 

答案 1 :(得分:5)

MySQL存储过程不支持任何顺序的命名参数。功能请求已在过去完成,例如:

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

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

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

如果您想要更多灵活性,我建议您编写存储过程以接受 no 参数,但直接使用会话变量。

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