2010-11-22 78 views
1

我可以在MySQL中使用存儲過程的命名參數嗎?我需要調用存儲過程是這樣的:MySQL中存儲過程的命名參數

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

答案是

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

感謝Pentium10。

回答

3

這是不可能正式的。

但有一個解決方法,可以提供幫助。使用這個:

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

嗨Pentium10,可惜的是它不會幫助我。我需要真正的命名參數。不管怎樣,謝謝你。 – Worker 2010-11-22 13:32:56

+0

你不能那樣做。但是你可以將一個名字和一個變量作爲一對。 – Pentium10 2010-11-22 13:33:35

+0

啊!我懂了!這看起來好多了。給我幾秒鐘的測試請:-) – Worker 2010-11-22 13:37:23

4

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