Hier dürfte der Fehler sein:
Code:
DELIMITER |
CREATE TRIGGER name AFTER INSERT ON test.x
FOR EACH ROW BEGIN
SET @counter = (SELECT COUNT(spalte) FROM test.y WHERE id = NEW.id);
# Hier soll nun über die Anzahl iteriert werden
FOR 1 TO @COUNTER BEGIN
INSERT INTO db2.z(...) VALUES (...);
END;
END;
| DELIMITER ;
also das letzte
; ist syntaktisch nicht korrekt. Es MUSS auch nicht notiert werden, da das letzte END die gesamte Routine beendet.
Allerdings wundere ich mich, dass Dir nicht schon ein anderer Syntaxfehler angemeckert wurde:
Code:
FOR 1 TO @COUNTER BEGIN
FOR-Schleifen sind in Triggern nicht erlaubt; siehe
hier
Weiterhin sind folgende Syntaxfehler zu erkennen:
Code:
SET @counter = (SELECT COUNT(spalte) FROM test.y WHERE id = NEW.id);
ist ebenso falsch, da SELECT-Anweisungen in dieser Notation ebenfalls nicht erlaubt sind (siehe o.a. Link).
Variablen sollten auch korrekt verwendet werden: @counter ist NICHT @COUNTER!
Dein Trigger könnte dann so aussehen (OHNE Garantie und Haftung):
Code:
DELIMITER |
CREATE TRIGGER name AFTER INSERT ON test.x
FOR EACH ROW BEGIN
DECLARE counter int;
DECLARE lfdnr int;
SELECT COUNT(spalte) INTO counter FROM test.y WHERE id = NEW.id LIMIT 1;
# Zaehlervariable setzen
SET lfdnr=0;
# Schleife fuer Aktion
WHILE lfdnr<counter DO
INSERT INTO db2.z(...) VALUES (...);
SET lfdnr = lfdnr+1;
END WHILE;
END
|
DELIMITER ;