我在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
感谢您的帮助。
答案 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;