Я не знаю, как заставить работать триггер.Мне уже удалось сделать это без ошибок, но теперь у меня есть проблема из заголовка.
Вот фотография схемы данной базы данных:
Большое спасибо за любую помощь или идеи!
/* Trigger do liczenia Total w Platnosciach */
DELIMITER //
CREATE TRIGGER t_Payments AFTER INSERT ON Payments
FOR EACH ROW
BEGIN
/* Ciagniemy numer rezerwacji (ZALOZENIE: TYLKO JEDNO ZRODLO ROBIENIA REZERWACJI) */
SET @bookID=0;
SELECT b.BookID INTO @bookID
FROM Bookings b
ORDER BY b.BookID DESC
LIMIT 1;
/* Calosc Pokoju */
SET @room=0;
SELECT
TRUNCATE((DATEDIFF(b.DepDate,b.ArrDate)*r.Price),2) INTO @room
FROM Rooms r
INNER JOIN Bookings b ON r.RoomID = b.RoomID
WHERE
b.BookID = @bookID;
/* Calosc Uslug */
SET @serv=0;
SELECT
TRUNCATE(SUM(si.price),2) INTO @serv
FROM Bookings b
INNER JOIN Services se ON b.BookID = se.BookID
INNER JOIN ServInfo si ON se.code = si.code
WHERE
b.BookID = @bookID;
/* Kod wbicia w Payments Total*/
UPDATE Payments
SET Total=((@room)+(@serv))
WHERE PaymentID=@bookID;
END //
DELIMITER ;
ОШИБКА 1442 (HY000): Невозможно обновить таблицу «платежей» в сохраненной функции / триггере, поскольку она уже используется оператором, который вызвал эту сохраненную функцию /триггер.
Предполагается, что триггер рассчитывает, сколько будет стоить резервирование.
Позже я постараюсь сделать сам ВВОД данных в первую очередь невозможным, поскольку ввод 0 илислучайное совпадение бессмысленно, если оно будет заменено в ту же секунду, когда его отправят.