Ya he hablado de lo confuso que me resultaba cómo hacer un Stored Procedure en MySQL en comparación con MS-SQL Server que es mi habitual.
Un paso más en su comprensión, es la palabra «DELIMITER».
Lo habitual para separar una instrucción de otra, es finalizarlas con un «;» pero un SP, al igual que un Trigger, estan formados por varias instrucciones, por lo tanto, antes de comenzar su definición, debes especificar qué caracter delimita (o separa) un SP o un Trigger del siguiente SP o Trigger.
La cuestión metalógica será, si cambias el delimitador de instrucciones por excelencia, para separar un conjunto de instrucciones agrupadas en un objeto (SP o Trigger) de otro objeto, cómo es que este delimitador sigue siendo necesario y funcional dentro de este conjunto de instrucciones? Entonces, para qué cambiarlo? y sobre todo, para qué restaurarlo después? Me parece una manera de marear la perdiz.
DELIMITER | CREATE TRIGGER testref BEFORE INSERT ON test1 FOR EACH ROW BEGIN INSERT INTO test2 SET a2 = NEW.a1; DELETE FROM test3 WHERE a3 = NEW.a1; UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1; END; | DELIMITER ;