使用mysql在一个存储过程中进行多个循环

时间:2019-08-01 09:40:00

标签: mysql-5.6 heidisql

我是存储过程事件中的新手。 (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 .. ??

如果问题不清楚,请问我!谢谢!!! (对不起,如果我的英语不好!)

0 个答案:

没有答案