DROP TRIGGER in Prozedur?



Hallo zusammen,

ich habe folgende Prozedur:
DELIMITER //
CREATE PROCEDURE drop_trigger()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE trig_name char(255);
DECLARE dummy char;
DECLARE trig_cursor CURSOR FOR SHOW TRIGGERS;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN trig_cursor;
REPEAT
FETCH trig_cursor INTO trig_name, dummy, dummy, dummy, dummy, dummy, dummy, dummy;
IF NOT done THEN
DROP TRIGGER trig_name;
END IF;
UNTIL done END REPEAT;
END//
DELIMITER ;

Rufe ich diese Prozedur mit CALL drop_trigger() auf, erhalte ich die lapidare Fehlermeldung "ERROR 1360 (HY000): Trigger does not exist".
Da die Prozedur die Namen der Trigger in der Datenbank sauber ausgibt, wenn ich "DROP TRIGGER trig_name;" durch "SELECT trig_name;" ersetze, gehe ich davon aus, daß ich die deklarierte Variable nicht in einem DROP TRIGGER Statement verwenden kann.

Hat jemand hier eine Idee, wie ich alle Trigger in einer Datenbank automatisiert löschen kann, ohne ihre Namen zu kennen? Im Idealfall soll die Lösung mit MySQL-Bordmitteln auskommen. Via externer Skriptsprache o.ä. ist es ja kein Problem...

Hintergrund: Es soll eine DB-Migration stattfinden, bei der die Trigger nur stören würden. Da nach der Migration ein komplett neuer Satz an Triggern eingespielt wird, stimmen die Namen nicht überein. Ich möchte aber nur ungern die Namen der alten Trigger hart in das Migrationsskript kodieren. Wer weiß, wofür man das nochmal brauchen kann ;)

Danke und Grüße,
Dominik
--
Wo kämen wir denn da hin, wenn jeder nur fragte "Wo kämen wir denn
da hin?", aber niemand ginge, um zu sehen, wohin wir kämen, wenn wir
gingen?
(Autor unbekannt)
.



Relevant Pages