Z tohoto příspěvek na blogu
Spouštěče MySQL:Jak zrušíte INSERT, UPDATE nebo DELETE pomocí spouštěče? Na #mysql EfNet se někdo zeptal:
Jak zajistím, aby spouštěč přerušil operaci, pokud moje obchodní pravidlo selže?
V MySQL 5.0 a 5.1 se musíte uchýlit k nějakému triku, aby spouštěč selhal a vydal smysluplnou chybovou zprávu. MySQL StoredProcedure FAQ říká o chybovém zpracování toto:
SP 11. Mají poskytovatelé služeb prohlášení „navýšení“ pro „zvýšení chyb aplikace“? Promiň, momentálně ne. Standardní příkazy SQL SIGNAL a RESIGNAL jsou v TODO.
Možná, že MySQL 5.2 bude obsahovat prohlášení SIGNAL, díky kterému bude toto nabourání přímo z MySQL StoredProcedure Programming zastaralé. Jaký je hack? Donutíte MySQL, aby se pokusilo použít sloupec, který neexistuje. Škaredý? Ano. Funguje to? Jistě.
CREATE TRIGGER mytabletriggerexample BEFORE INSERT FOR EACH ROW BEGIN IF(NEW.important_value) < (fancy * dancy * calculation) THEN DECLARE dummy INT; SELECT Your meaningful error message goes here INTO dummy FROM mytable WHERE mytable.id=new.id END IF; END;