Создать триггер SQL, но он не работает. Где моя ошибка?
Есть таблицы tenantsmadeutilitypayment и tenants:
CREATE TABLE Tenants(
PersonalAccount INT UNSIGNED,
SecondName VARCHAR(20),
FirsrName VARCHAR(20),
Patronymic VARCHAR(20),
AmountOfRegisteredPeople TINYINT UNSIGNED,
Privilege INT(30),
PRIMARY KEY (PersonalAccount));
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 tenants (SecondName,FirstName, Patronymic, AmountOfRegisteredPeople,Privilege, personalAccount)
VALUES
('Crew','Alexey','Igorevich','2','5','44098'),
('Firth','John','Sergeevich','1','1','44099'),
('Macros','Karl','Marsovich','3','6','44100'),
('Turol','Veronika','Eduardovna','1','13','44101'),
('Irden','Tatyana','Viktorovna','2','0','44102'),
('Wex','Igor','Kilimov','2','0','44103'),
('Exort','Inna','Sergeevna','3','30','44104'),
('Whither','Vladimir','Ilich','2','15','44105'),
('Loopin','Kostya','Vyacheslavovich','3','17','44106'),
('Chick','Vladislav','Bogdanovich','1','0','44107'),
('Gray','Egor','Sergeevich','4','10','44108'),
('Hopin','Ilya','Vasilevich','2','3','44109'),
('Iriya','Inna','Antonovna','2','4','44110'),
('Kai`sa','Darya','Antonovna','1','1','44111'),
('Fillit','Nastya','Igorevna','1','12','44112');
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');
Отдельным запросом создаю столбец TRIGG
ALTER TABLE tenantmadeutilitypayment ADD (TRIGG VARCHAR(50));
Главная задача : требуется создать триггер, который будет брать
CONCAT( tenants.SecondName, " ", LEFT ( tenants.FirstName, 1 ), ". ", LEFT ( tenants.Patronymic, 1 )
И вставлять в таблицу tenantmadeutilitypayment.TRIGG соответствующие данные.
Я создал следующий триггер, но где-то есть ошибка. Он компилируется, но ничего не выполняет.
DROP TRIGGER IF EXISTS add_FIO;
CREATE TRIGGER add_FIO
AFTER INSERT
ON tenantmadeutilitypayment FOR EACH ROW
BEGIN
DECLARE done integer default 0;
DECLARE new_FIO VARCHAR(30);
DECLARE RESULT VARCHAR(255) DEFAULT " ";
DECLARE cur CURSOR FOR SELECT DISTINCT
CONCAT( tenants.SecondName, " ", LEFT ( tenants.FirstName, 1 ), ". ", LEFT ( tenants.Patronymic, 1 ), ". " )
FROM
tenants
INNER JOIN tenantmadeutilitypayment ON tenants.PersonalAccount = tenantmadeutilitypayment.PersonalAccount;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;
OPEN cur;
WHILE done = 0 DO
FETCH cur INTO new_FIO;
IF done = 1 THEN
UPDATE tenantmadeutilitypayment SET tenantmadeutilitypayment.TRIGG = RESULT;
END IF;
SET RESULT = CONCAT(RESULT, new_FIO, "; ");
END WHILE;
CLOSE cur;
END;
Ответы (1 шт):
Автор решения: Jap_Story
→ Ссылка
Частичный ответ. Я изменил код, но всё же выводилась ошибка из которой я понял, что нельзя вставлять и одновременно обновлять таблицу. Возможно, что я ошибаюсь.