トリガーを定義する前に、必ず区切り文字を変更してください。また、テーブルとトリガーを作成するときは、同じテーブル名と列名を使用していることを確認してください(att
を使用しています)。 およびattendance
、およびSID
およびStudID
、あなたの例では)。
そのまま、区切り文字を設定した後、MySQL 5.1.55でテストしたところ、トリガー定義でエラーは発生しませんでした。
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 ;