MySQL中存储过程的命名参数

Wor*_*ker 2 mysql stored-procedures

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

CALL stored_procedure(@param1 = "foo1", @param2 = "foo2");
Run Code Online (Sandbox Code Playgroud)

答案是

CALL stored_procedure(@param1 := "foo1", @param2 := "foo2");
Run Code Online (Sandbox Code Playgroud)

感谢Pentium10.

Pen*_*m10 5

这是不可能正式的.

但是有一种解决方法可以提供帮助.用这个:

CALL prcInsertStuff ( 
@paramName1 := nameValue1 
, @paramValue1 := paramValue1 
); 
Run Code Online (Sandbox Code Playgroud)

  • 我已经尝试了上面的答案,它仍然按照它们在 sp 中定义的顺序放置参数,不管你怎么称呼它们。 (2认同)

Bil*_*win 5

MySQL存储过程不支持任何顺序的命名参数.功能请求过去已经发出,例如:

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

CALL stored_procedure(@param1 := "foo1", @param2 := "foo2");
Run Code Online (Sandbox Code Playgroud)

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

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

SET @param1 := "foo1", @param2 := "foo2";
CALL stored_procedure();
Run Code Online (Sandbox Code Playgroud)

在你的程序中,则必须引用变量@param1,@param2等等.

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

阅读http://dev.mysql.com/doc/refman/5.7/en/user-variables.html