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.
这是不可能正式的.
但是有一种解决方法可以提供帮助.用这个:
CALL prcInsertStuff (
@paramName1 := nameValue1
, @paramValue1 := paramValue1
);
Run Code Online (Sandbox Code Playgroud)
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