Mysql存储过程集/声明变量问题

时间:2017-03-18 15:51:20

标签: mysql stored-procedures

我在Mysql中工作,如果用户在表租用中的时间不超过10小时,我想创建一个插入数据库的存储过程。

这是我的代码:

CREATE PROCEDURE insert_rental(in user_idInsert INTEGER, in fields_idInsert INTEGER, in startDateTimeInsert DATETIME, in endDateTimeInsert DATETIME, in monthDate INTEGER, in yearDate INTEGER, in user_role INTEGER) 
BEGIN  
DECLARE user_totalHours FLOAT(23,19); 

SELECT Sum(time_to_sec(TIMEDIFF(endDateTimeInsert,startDateTimeInsert))/3600)  
INTO user_totalHours  
FROM `rental`  
WHERE MONTH(startDateTime)=monthDate  
AND YEAR(startDateTime)=yearDate  
AND user_id = user_idInsert; 

IF user_role=2 && user_totalHours<10 THEN  
        INSERT INTO rental(user_id, field_id ,startDateTime, endDateTime)  
        VALUES(user_idInsert, fields_idInsert, startDateTimeInsert, endDateTimeInsert); 
    ELSEIF user_role!=2 THEN  
        INSERT INTO rental(user_id, field_id, startDateTime, endDateTime)  
        VALUES(user_idInsert, fields_idInsert, startDateTimeInsert, endDateTimeInsert); 
END IF; 
END

我也试过这个:

SET @user_totalHours = SELECT Sum(time_to_sec(TIMEDIFF(endDateTimeInsert,startDateTimeInsert))/3600)  
FROM `rental`  
WHERE MONTH(startDateTime)=monthDate  
AND YEAR(startDateTime)=yearDate  
AND user_id = user_idInsert; 

但变量user_totalHours始终为NULL

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我解决了这个问题,就是如果租赁一个月没有任何东西像1月那样,null就是值,所以我改变了我的其他if语句:

   DECLARE user_totalHours FLOAT DEFAULT 0.0; 

SELECT Sum(time_to_sec(TIMEDIFF(endDateTime,startDateTime))/3600)  
INTO user_totalHours  
FROM `rental`  
WHERE MONTH(startDateTime)=monthDate  
AND YEAR(startDateTime)=yearDate  
AND user_id = user_idInsert; 

    IF (user_role!=2) THEN
            INSERT INTO rental(user_id, fields_id ,startDateTime, endDateTime)  
            VALUES(user_idInsert, fields_idInsert, startDateTimeInsert, endDateTimeInsert); 
    ELSEIF (user_totalHours<10 || user_totalHours IS NULL) THEN  
        INSERT INTO rental(user_id, fields_id, startDateTime, endDateTime)  
        VALUES(user_idInsert, fields_idInsert, startDateTimeInsert, endDateTimeInsert);
        ELSE SELECT user_totalHours;
    END IF;