即使参数更改,Mysql存储过程也只返回一个相同的值。 如果我运行这个
CALL gain_loss_indi('CNX','day1','2015-11-10')
结果将是@clvalue=700.00
,如果我更改了第一个参数CALL gain_loss_indi('NV20','day1','2015-11-10')
,则返回值仍然与之前的结果@clvalue=700.00
相同,但它应该是@clvalue=50.00
。请帮我解决这个问题。以下是我的存储过程。
DELIMITER ||
CREATE PROCEDURE gain_loss_indi(
IN Symbol VARCHAR(50),
IN Period VARCHAR(20),
IN date_ad datetime
)
BEGIN
IF Period ='day1' THEN
SET @clvalue := (SELECT (SELECT CLOSE_PRICE FROM cash_indices_data WHERE SYMBOL=Symbol AND date_added <= DATE_SUB(date_ad, INTERVAL 1 DAY) ORDER BY date_added DESC LIMIT 0,1) as clday1);
ELSEIF Period ='week1' THEN
SET @clvalue := (SELECT (SELECT CLOSE_PRICE FROM cash_indices_data WHERE SYMBOL=Symbol AND date_added <= DATE_SUB(date_ad, INTERVAL 1 WEEK) ORDER BY date_added DESC LIMIT 0,1) as clweek1);
ELSEIF Period ='week2' THEN
SET @clvalue := (SELECT (SELECT CLOSE_PRICE FROM cash_indices_data WHERE SYMBOL=Symbol AND date_added <= DATE_SUB(date_ad, INTERVAL 2 WEEK) ORDER BY date_added DESC LIMIT 0,1) as clweek2);
ELSEIF Period ='month1' THEN
SET @clvalue :=(SELECT (SELECT CLOSE_PRICE FROM cash_indices_data WHERE SYMBOL=Symbol AND date_added <= DATE_SUB(date_ad, INTERVAL 1 MONTH) ORDER BY date_added DESC LIMIT 0,1) as clmonth1);
ELSEIF Period ='month3' THEN
SET @clvalue :=(SELECT (SELECT CLOSE_PRICE FROM cash_indices_data WHERE SYMBOL=Symbol AND date_added <= DATE_SUB(date_ad, INTERVAL 3 MONTH) ORDER BY date_added DESC LIMIT 0,1) as clmonth3);
ELSEIF Period ='month6' THEN
SET @clvalue :=(SELECT (SELECT CLOSE_PRICE FROM cash_indices_data WHERE SYMBOL=Symbol AND date_added <= DATE_SUB(date_ad, INTERVAL 6 MONTH) ORDER BY date_added DESC LIMIT 0,1) as clmonth6);
ELSEIF Period ='month9' THEN
SET @clvalue :=(SELECT (SELECT CLOSE_PRICE FROM cash_indices_data WHERE SYMBOL=Symbol AND date_added <= DATE_SUB(date_ad, INTERVAL 9 MONTH) ORDER BY date_added DESC LIMIT 0,1) as clmonth9);
ELSEIF Period ='year1' THEN
SET @clvalue := (SELECT (SELECT CLOSE_PRICE FROM cash_indices_data WHERE SYMBOL=Symbol AND date_added <= DATE_SUB(date_ad, INTERVAL 1 YEAR) ORDER BY date_added DESC LIMIT 0,1) as clyear1);
END IF;
SELECT @clvalue;
END ||
DELIMITER ;