Đảm bảo rằng bạn thay đổi dấu phân cách trước khi xác định trình kích hoạt. Đồng thời đảm bảo rằng bạn đang sử dụng cùng một tên bảng và cột khi tạo bảng và trình kích hoạt (bạn đang sử dụng att
và attendance
và SID
và StudID
, trong các ví dụ của bạn).
Như vậy, định nghĩa trình kích hoạt không gây ra lỗi khi tôi kiểm tra nó trong MySQL 5.1.55 sau khi đặt dấu phân cách.
delimiter $$
CREATE TRIGGER `att_up`
AFTER UPDATE ON `attendance`
FOR EACH ROW
BEGIN
DECLARE Zeros INT;
DECLARE Ones INT;
DECLARE total INT;
DECLARE attend FLOAT;
SELECT SUM(8-(h1+h2+h3+h4+h5+h6+h7+h8)),
SUM(h1+h2+h3+h4+h5+h6+h7+h8),
SUM(8-(h1+h2+h3+h4+h5+h6+h7+h8)) + SUM(h1+h2+h3+h4+h5+h6+h7+h8)
INTO Zeros, Ones, Total FROM attendance
WHERE SID=NEW.SID;
SET attend=((Zeros-Ones)/total)/100;
INSERT INTO per (SID, CID, per) values (NEW.SID, NEW.CID, attend)
ON DUPLICATE KEY UPDATE per=attend;
END$$
delimiter ;