Как создать TRIGGER SQL. Помогите пожалуйста

Есть таблица tenantmadeutilitypayment, в ней есть колонка DateOfPay и Paid_UAH. Я набросал код, но NaviCat ругается. В чём моя ошибка? Код уже на половине не работает((( А как вторую часть кода делать даже не представляю ещё...

Задача : Создать триггер, который будет проверять оплату коммунальных платежей: если жилец оплатил после 15 числа отчетного месяца, то ему начисляется пеня в размере 0,5% за каждый просроченный день.

CREATE OR REPLACE TRIGGER Ch 
AFTER INSERT OR UPDATE ON tenantmadeutilitypayment
    FOR EACH ROW
    DECLARE DoF date;
    BEGIN
        
        SELECT DateOfPay INTO DoF FROM tenantmadeutilitypayment WHERE DAY(DateOfPay)>15;
            IF (DoF>15) THEN
            Paid_UAH = Paid_UAH * 1.05;
            END IF;
        END Ch_Dt;
     

Дана таблица :

create TABLE `tenantmadeutilitypayment` (
  `Receipt_id` int not null AUTO_INCREMENT,
  `DateOfPay` date,
  `PersonalAccount` int unsigned DEFAULT NULL,
  `Payment_id` int unsigned NOT NULL,
  `Paid_UAH` decimal(5,2) DEFAULT NULL,
FOREIGN KEY (PersonalAccount) REFERENCES Tenants (PersonalAccount),
FOREIGN KEY (Payment_id) REFERENCES TypesOfUtilityPayments (Payment_id),
  PRIMARY KEY (`Receipt_id`));

Заполнение таблиц:

INSERT INTO tenantmadeutilitypayment (Receipt_id, DateOfPay, Paid_UAH, Payment_id, PersonalAccount)
    VALUES
    ('001','2020-09-03','38.00','100','44098'),
    ('002','2020-10-05','45.47','101','44099'),
    ('003','2020-08-21','36.50','102','44100'),
    ('004','2020-09-30','37.43','103','44101'),
    ('005','2020-09-28','39.36','104','44102'),
    ('006','2020-09-03','39.00','105','44103'),
    ('007','2020-10-07','25.00','106','44104'),
    ('008','2020-11-09','50.98','107','44105'),
    ('009','2020-09-10','40.40','108','44106'),
    ('010','2020-08-13','33.76','109','44107'),
    ('011','2020-10-23','29.66','110','44108'),
    ('012','2020-11-24','38.00','111','44109'),
    ('013','2020-09-26','24.00','112','44110'),
    ('014','2020-09-15','38.50','113','44111'),
    ('015','2020-08-15','40.00','114','44112');

Далее вопросы: Куда начисляется пеня? При создании новой записи в таблице, если число > 15, то начисляется пеня за КАЖДЫЙ ДЕНЬ ( + 0.5% к введённой сумме) в столбце <Paid_UAH>

Как определить отчётный месяц? Отчётный месяц - текущая дата.

Я пытался сравнивать хотя бы день, а потом наращивать сложность триггера, если можно как-то проще - с радостью прочитаю)))).


Ответы (1 шт):

Автор решения: Akina
CREATE TRIGGER add_penalty
BEFORE INSERT
ON tenantmadeutilitypayment
FOR EACH ROW
SET NEW.Paid_UAH = NEW.Paid_UAH * (1 + CASE WHEN DAY(NEW.DateOfPay) > 15 
                                            THEN (DAY(NEW.DateOfPay) - 15) * 0.005
                                            ELSE 0
                                            END);

fiddle

→ Ссылка