2014-02-28 111 views
0

這是其中一個「可以完成」的問題。我有一個存儲過程可能需要很多輸入參數,所以我想知道是否可以建立一個輸入參數,然後根據逗號分隔的輸入設置變量。示例...變量的存儲過程參數

drop procedure if exists sptest; 
delimiter $$ 
create procedure sptest (v1 varchar(254)) 
begin 
if v1=1 then set @vx1:='test1';end if; 
if v1=2 then set @vx2:='test2';end if; 
if v1=3 then set @vx3:='test3';end if; 
if v1=4 then set @vx4:='test4';end if; 
select v1; 
select @vx1,@vx2,@vx3,@vx4; 
end 
call sptest('1,2,3,4'); 

如果可能,任何示例/指導將不勝感激。

+0

您可以解析輸入字符串嘗試用一些這樣的: http://stackoverflow.com/questions/11835155/mysql-split-comma-seperated-string-進入臨時表 – esdebon

回答

1

MySQL帶有一個名爲FIND_IN_SET的字符串函數。我認爲這是你的答案。以下是如何爲你工作:

DROP PROCEDURE IF EXISTS sptest; 

DELIMITER $$ 
CREATE PROCEDURE sptest (v1 VARCHAR(254)) 
BEGIN 
    IF FIND_IN_SET('1', v1) THEN SET @vx1:='test1'; END IF; 
    IF FIND_IN_SET('2', v1) THEN SET @vx2:='test2'; END IF; 
    IF FIND_IN_SET('3', v1) THEN SET @vx3:='test3'; END IF; 
    IF FIND_IN_SET('4', v1) THEN SET @vx4:='test4'; END IF; 
    SELECT v1; 
    SELECT @vx1, @vx2, @vx3, @vx4; 
END$$ 

CALL sptest('1,2,3,4'); 
+0

這正是我所需要的。非常感謝! – Atwp67

+0

不客氣,只要確保閱讀了相關文檔。你需要知道它的侷限性。 – Mehran