我不知道如何使触发器工作。我已经设法使它顺利通过,但现在标题有问题。
Here is a photo of a schema of given database:
非常感谢您的帮助或想法!
/* 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或随机输入是随机的,则在输入第二个输入时将其替换是没有意义的。
答案 0 :(得分:0)
您的错误说明了一切:您无法更新(行入)与为其创建触发器的表。但是,您可以通过以下方式修改要插入的行:
AFTER
更改为BEFORE
具有:
CREATE TRIGGER t_Payments BEFORE INSERT ON Payments
FOR EACH ROW
BEGIN
-- Your magic here
SET NEW.Total = ((@room)+(@serv));
END