汽车表里有车牌号,日租租金和月租租金,车牌号为主键。
租赁表里有车牌号,租赁日期,租赁天数,还车日期,车牌号为外键。
要求建一个存储过程,计算所选区间内(即开始时间和截止时间之间的天数)租赁表中所有租赁合同产生的租金。提示:只有开始时间在租赁合同的租赁日期之后,截止时间在租赁合同的还车日期之前才计算该合同产生的租金。若租赁天数小于三十天则按照日租租金计算每天的费用,若租赁天数大于等于三十天,则按照月租租金计算
每天的费用。
我的代码如下,但报错了,请支持错误之处并修改
CREATE DEFINER = CURRENT_USER PROCEDURE 日期区间租金收入
(IN 开始时间
datetime,IN 截止时间
datetime)
BEGIN
DECLARE 租赁天数temp INT;
DECLARE 日租租金temp INT;
DECLARE 月租租金temp INT;
DELETE 区间天数 INT;
DELETE total_rent INT;
SET 区间天数=SELECT TIMESTAMPDIFF(DAY,开始时间,结束时间)
DECLARE done INT DEFAULT FALSE;
DECLARE cur_rental CURSOR FOR
SELECT 租赁天数,日租租金,月租租金
FROM 租赁信息
JOIN 车辆信息 ON 租赁信息.车牌号 = 车辆信息.车牌号
WHERE 租车日期 <= 开始时间AND 还车日期 >= 截止时间;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
-- 打开游标
OPEN cur_rental;
read_loop: LOOP
FETCH cur_rental INTO 租赁天数temp, 日租租金temp, 月租租金temp;
-- 如果没有更多数据,跳出循环
IF done THEN
LEAVE read_loop;
END IF;
-- 根据租赁天数计算租金
IF 租赁天数temp < 30 THEN
SET total_rent = total_rent + 日租租金temp*区间天数;
ELSE
-- 假设月租租金是按月计算,需转换为日租金
SET total_rent = total_rent + 月租租金temp*区间天数;
END IF;
END LOOP read_loop;
-- 关闭游标
CLOSE cur_rental;
-- 输出总租金
SELECT total_rent AS 当日租金收入;
END;