DROP TRIGGER in Prozedur?

DROP TRIGGER in Prozedur?

am 04.04.2008 18:38:59 von Dominik Echterbruch

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)