2015-10-30 27 views
-1

因此,我寫了這個小的存儲功能,應該將果汁機的成本返還給我。但是,我有一些麻煩,找出爲什麼它沒有工作。任何幫助,將不勝感激MySql - 如何擺脫無數據:零行取得

DELIMITER $$ 

CREATE DEFINER=`root`@`localhost` FUNCTION `juiceOrderCost`(p_id INT) RETURNS double 
BEGIN 
DECLARE cost DOUBLE; 
DECLARE i INT DEFAULT 0; 
DECLARE numRows INT; 
DECLARE numDone INT DEFAULT 1; 
DECLARE cup_id INT DEFAULT 0; 

DECLARE myCursor CURSOR for 
    SELECT cupId FROM hasJuice WHERE orderID = p_id; 

OPEN myCursor; 
SELECT FOUND_ROWS() INTO numRows; 

FETCH myCursor INTO cup_id; 
WHILE numDone <= numRows DO 

SET cost = cost + juiceCupCost(cup_id); 

FETCH myCursor INTO cup_id; 

SET numDone = numDone + 1; 

END WHILE; 

CLOSE myCursor; 

RETURN cost; END

+0

爲什麼光標。 juiceCupCost在哪裏。你在哪裏建立了'DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;'並且閱讀循環 – Drew

+0

經常人們使用遊標,因爲他們喜歡程序化思考,而且還沒有處於集合和關係的思維模式。遊標像狗一樣運行。拍攝連接和聚合函數。 – Drew

+0

主要使用遊標,因爲它真的是我能想到的唯一解決方案。我是一個非常初學者,至少可以說。我還沒有確定。 juiceCupCost是同一個數據庫中的一個功能。那個工作正常。給出一個cupID,它給了我cupId的成本。我不知道你的意思是讀循環/。 – Azazel

回答