Как создать 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 шт):
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);