ट्रिगर को परिभाषित करने से पहले सुनिश्चित करें कि आपने सीमांकक बदल दिया है। यह भी सुनिश्चित करें कि तालिका और ट्रिगर बनाते समय आप समान तालिका और स्तंभ नामों का उपयोग कर रहे हैं (आप 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 ;