我的問題可能聽起來很蹩腳,但我仍然無法弄清楚這段代碼有什麼問題。我在sqlyog中創建了一個存儲過程,現在我想調用它。我嘗試了幾乎所有的東西,但它不起作用。如何在mysql中使用while循環調用存儲過程
SET @x=1;
WHILE @x<=10 DO
CALL mypro();
SET @[email protected]+1;
END WHILE;
在此先感謝。
我的問題可能聽起來很蹩腳,但我仍然無法弄清楚這段代碼有什麼問題。我在sqlyog中創建了一個存儲過程,現在我想調用它。我嘗試了幾乎所有的東西,但它不起作用。如何在mysql中使用while循環調用存儲過程
SET @x=1;
WHILE @x<=10 DO
CALL mypro();
SET @[email protected]+1;
END WHILE;
在此先感謝。
流程控制語句(如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允許流控制語句作爲正常查詢執行的一部分。
此代碼是否包含在函數或存儲過程中? WHILE需要在該上下文中執行。 – 2013-02-22 16:44:55
不,我只是把它寫在查詢區域寫入查詢 – Shahzaib 2013-02-22 16:46:32
如果我只是寫CALL mypro()它可以正常工作 – Shahzaib 2013-02-22 16:47:24