2013-02-22 128 views
1

我的問題可能聽起來很蹩腳,但我仍然無法弄清楚這段代碼有什麼問題。我在sqlyog中創建了一個存儲過程,現在我想調用它。我嘗試了幾乎所有的東西,但它不起作用。如何在mysql中使用while循環調用存儲過程

SET @x=1; 
WHILE @x<=10 DO 
CALL mypro(); 
SET @[email protected]+1; 
END WHILE; 

在此先感謝。

+0

此代碼是否包含在函數或存儲過程中? WHILE需要在該上下文中執行。 – 2013-02-22 16:44:55

+0

不,我只是把它寫在查詢區域寫入查詢 – Shahzaib 2013-02-22 16:46:32

+0

如果我只是寫CALL mypro()它可以正常工作 – Shahzaib 2013-02-22 16:47:24

回答

2

流程控制語句(如IF, WHILE)需要在函數或存儲過程的上下文中執行。如果您希望在循環中執行mypro(),則必須將該操作本身創建爲過程。下面我將創建一個名爲call_mypro_x10()的過程,它在WHILE循環中調用原始存儲過程。

DELIMITER $$ 
CREATE PROCEDURE call_mypro_x10() 
BEGIN 
    SET @x = 1; 
    WHILE @x <= 10 DO 
    CALL mypro(); 
    SET @x := @x + 1; 
    END WHILE; 
END$$ 
DELIMITER ; 

然後調用此過程它包裝的另一個:

CALL call_mypro_x10(); 

注意,在所有客戶端的DELIMITER陳述可能不是必需的,以及一些MySQL客戶提供指定其它分隔的不同的方法在存儲過程和函數定義中需要。顯然SQLyog supports DELIMITER

an open feature request允許流控制語句作爲正常查詢執行的一部分。

+0

感謝這工作。 – Shahzaib 2013-02-22 17:05:02

+0

謝謝,但我沒有足夠的聲望點來做到這一點,而我已經點擊了勾號 – Shahzaib 2013-02-22 17:08:24

+0

完成,再次感謝先生 – Shahzaib 2013-02-22 17:10:17