Ik heb een tabel 'acties' welke acties bevat welke op een bepaald tijdstip moeten worden uitgevoerd. Hiervoor wil ik het MySQL event mechanisme gebruiken.
Nu wil ik de events van MySQL consistent houden met wat er in mijn acties tabel staat, dmv triggers op de acties tabel.
Het probleem is dat de syntax voor events een event_name vereisen en ik deze maar niet 'dynamisch' krijg. Ik wil dat het event_name gelijk is aan 'action_[id]' waarbij [id] de primary key uit de acties tabel is.
Als er bijvoorbeeld een record uit de acties tabel word verwijderd wil ik zoiets als dit:
Dat werkt dus niet, je mag op de plek van het event name blijkbaar geen subquery of function neerzetten.
Ik heb al geprobeerd met variabelen te werken:
Maar dat werkt niet. Toen kwam ik op het idee prepared statements te gebruiken:
Maar dat gaat al mis bij de prepare stap.
Iemand nog een idee / hack waarmee ik dit wel voor elkaar krijg? Voor de duidelijkheid, de query word dmv een trgger uitgevoerd, dus ik probeer niet vanuit PHP ofzo een dynamische query bouwen.
Nu wil ik de events van MySQL consistent houden met wat er in mijn acties tabel staat, dmv triggers op de acties tabel.
Het probleem is dat de syntax voor events een event_name vereisen en ik deze maar niet 'dynamisch' krijg. Ik wil dat het event_name gelijk is aan 'action_[id]' waarbij [id] de primary key uit de acties tabel is.
Als er bijvoorbeeld een record uit de acties tabel word verwijderd wil ik zoiets als dit:
SQL:
1
2
3
| CREATE TRIGGER delete_action BEFORE DELETE ON actions FOR EACH ROW DROP EVENT IF EXISTS CONTACT_WS('_', 'action', OLD.id); |
Dat werkt dus niet, je mag op de plek van het event name blijkbaar geen subquery of function neerzetten.
Ik heb al geprobeerd met variabelen te werken:
SQL:
1
2
| SET @event_name := 'action_1'; DROP EVENT IF EXISTS @event_name; |
Maar dat werkt niet. Toen kwam ik op het idee prepared statements te gebruiken:
SQL:
1
2
3
| PREPARE stmt1 FROM 'DROP EVENT IF EXISTS ?'; SET @event_name := 'action_1'; EXECUTE stmt1 USING @event_name; |
Maar dat gaat al mis bij de prepare stap.
Iemand nog een idee / hack waarmee ik dit wel voor elkaar krijg? Voor de duidelijkheid, de query word dmv een trgger uitgevoerd, dus ik probeer niet vanuit PHP ofzo een dynamische query bouwen.
[ Voor 0% gewijzigd door LeonM op 31-07-2012 17:20 . Reden: typo ]