我是存储过程和事件中的新手。 (MySQL v5.6)
我已经使用 HeidiSQL
在 MySQL 中创建了一些过程和事件这是我的桌子:
CREATE TABLE `tbl_invoice` (
`Invoice_ID` VARCHAR(50) NOT NULL DEFAULT '0',
`Customer_ID` VARCHAR(50) NOT NULL,
`Customer_Name` VARCHAR(50) NOT NULL,
`License_Type` VARCHAR(50) NOT NULL,
`Price_List` VARCHAR(50) NOT NULL,
`Grand_Total` DECIMAL(10,2) NOT NULL,
`Invoice_Date` DATETIME NOT NULL,
`Credit_Duration_Date` CHAR(50) NULL DEFAULT NULL,
`Credit_Duration_Days` INT(2) NULL DEFAULT NULL,
`Remaining_Days` INT(2) NULL DEFAULT NULL,
`Credit_Paid_Date` CHAR(50) NULL DEFAULT NULL,
`Interest` DECIMAL(10,2) NULL DEFAULT NULL,
`Final_Total` DECIMAL(10,2) NULL DEFAULT NULL
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
;
这里发生的是
当我输入记录时,有2个选项。 信用和现金 如果选择信用,则应输入持续时间和剩余天数。 因此,客户应在此期限结束前付款。
此过程是,在我成功输入记录后,将开始过程 do_once 。 该过程执行后,事件将开始。活动开始后,剩余天数的每一天都会减少1。 如果 Remaining_Days (保留天数)为-1,它将计算兴趣
在第二过程中,每天 “ UNTIL” Remaining_Days 会添加兴趣 > 0 !
当 Credit_Paid_Date (贷方付款日期)为 “不为空” 时,剩余天数将变为 0 !
我试图一一执行这些事件和过程。一切正常。我需要执行一次这些过程,并且需要在 Remaining_Days (保留天数)变为 0 !
时停止!这些是我的活动和程序!
事件:
CREATE DEFINER=`root`@`localhost` EVENT `update_duration`
ON SCHEDULE
EVERY 1 DAY
ON COMPLETION NOT PRESERVE
DISABLE
COMMENT ''
DO BEGIN
UPDATE tbl_invoice SET Remaining_Days = Remaining_Days - 1
WHERE Credit_Duration_Days >= 1;
END
过程1:
CREATE DEFINER=`root`@`localhost` PROCEDURE `do_once`()
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
call update_duration();
UPDATE tbl_invoice SET Interest = Grand_Total * 24 / 100
WHERE Remaining_Days < 0;
UPDATE tbl_invoice SET Interest = Interest / 365
WHERE Remaining_Days < 0;
END
过程2:
CREATE DEFINER=`root`@`localhost` PROCEDURE `do_until`()
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
REPEAT
UPDATE tbl_invoice SET Interest = Interest + Interest
WHERE Remaining_Days < 0;
UNTIL Remaining_Days = 0
END REPEAT
我的大问题是,如何将 Remaining_Days (保留天数)带到 0 .. ??
如果问题不清楚,请问我!谢谢!!! (对不起,如果我的英语不好!)