2016-11-15 3 views
0

カーソルが1番目のレコードを処理しています。 2度目の記録には進まない。何が問題なの?以下は私のコードですMariaDBカーソルループの問題

処理する行が60万以上あります。 selectクエリを実行すると、正しい行数が表示されますが、ループは機能しません。

Delimiter $$ 
CREATE PROCEDURE p_updateHistory_1() 
BEGIN 
DECLARE v_symbol varchar(10); 
DECLARE v_pricedate date; 

DECLARE done BOOL DEFAULT FALSE; 
DECLARE cur1 CURSOR FOR SELECT symbol, PriceDate 
      from StockData 
      where PriceDate > '2016-06-30' 
      order by symbol asc, PriceDate desc; 

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; 

OPEN cur1; 

read_loop: LOOP 
FETCH cur1 INTO v_symbol, v_pricedate; 

If done THEN 
    LEAVE read_loop; 
END IF; 

Update StockData SET 
20DayTPAvg = f_TP20avg(symbol,PriceDate), 
20DayMFSum = f_20DayMFSum(symbol,PriceDate), 
20DayVolumeSum = f_20DayVolumeSum(symbol,PriceDate), 
MFFactor = f_20DayMFSum(symbol,PriceDate)/f_20DayVolumeSum(symbol,PriceDate), 
50DayHighestHigh = f_50DayHighestHigh(symbol,PriceDate), 
50DayLowestLow = f_50DayLowestLow(symbol,PriceDate), 
50DayFactor = ((close-f_50DayLowestLow(symbol,PriceDate))/(f_50DayHighestHigh(symbol,PriceDate)-f_50DayLowestLow(symbol,PriceDate)))*100, 
20DayAvgOf50DayFactor = f_20DayAvgOf50DayFactor(symbol,PriceDate), 
50DayMAvg20DayBfr = f_20DayMAvg20DayBfr(symbol,PriceDate), 
20DayAvgSqCh50DMA = f_20DayAvgSqCh50DMA(symbol,PriceDate), 
20dStdDevOf50DayMovAvg = SQRT(f_20DayAvgSqCh50DMA(symbol,PriceDate)), 
UpperBand = 50DayMovingAvg+2*SQRT(f_20DayAvgSqCh50DMA(symbol,PriceDate)), 
LowerBand = 50DayMovingAvg-2*SQRT(f_20DayAvgSqCh50DMA(symbol,PriceDate)), 
MidPointFactor = ((close-MidPoint)/(high-close))*100, 
20DayAvgOfMPFactor = f_20DayAvgOfMPFactor(symbol,PriceDate) 
Where symbol=v_symbol 
And PriceDate=v_pricedate; 

commit; 

END LOOP; 

CLOSE Cur1; 

END $$ 
Delimiter ; 
+0

任意の提案が必要? – 44KF

答えて

-1

CURSORsは通常間違いです。あなたは単にこれを行うことはできませんステートメント、カーソル?

UPDATE StockData 
    SET ... 
    WHERE PriceDate > '2016-06-30'; 

f_20DayAvgOf50DayFactor(など)はUDFまたはストアドファンクションですか。私はここで何も悪いことをやっている場合

総合指数は、

INDEX(symbol, PriceDate) 
+1

この回答はおそらく別のアプローチではありますが、遠隔からの質問への回答さえありません。 – ericWasTaken