mysql存储过程返回值不正确

时间:2016-05-17 12:32:34

标签: php mysql stored-procedures

即使参数更改,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 ;

0 个答案:

没有答案