Esto parece ser un duplicado de Reproducir evoluciones de framework 2.0 y crear disparador (Tenga en cuenta que, en mi opinión, la mejor respuesta es la publicada por Roger el 24 de mayo de 2013, es decir, el enlace de arriba)
"delimitador" no se puede utilizar en el texto del script de evolución; Parece que no puedo encontrar ninguna documentación sobre por qué esto es así. Pero tal vez tenga que ver con el hecho de que "delimitador" no es una declaración de SQL sino una propiedad de SQL.
Sin embargo, hay una solución en la sección Evoluciones de la documentación de Play 2 :
Play divide sus archivos .sql en una serie de declaraciones delimitadas por punto y coma antes de ejecutarlas una por una en la base de datos. Entonces, si necesita usar un punto y coma dentro de una declaración, escápelo ingresando;; en vez de;. Por ejemplo, INSERTAR EN VALORES de puntuación (nombre, carácter) ('punto y coma', ';;');.
Entonces, en su caso,
- Elimine la propiedad "delimitador" y
- Utilice ";;" en vez de ";" para tu interior Sentencias SQL, para evitar que el analizador de Play 2 ejecute estas sentencias SQL internas por separado.
Aquí hay un ejemplo que probé con éxito en Play 2.3 y mysql 14.14 Distrib 5.5.40 (Ubuntu 12.04LTS):
DROP TRIGGER IF EXISTS SOFTWARE_INSERT_CT_TRIGGER;
CREATE TRIGGER SOFTWARE_INSERT_CT_TRIGGER
BEFORE INSERT ON SOFTWARE
FOR EACH ROW
BEGIN
IF NEW.CREATED_TIME = '0000-00-00 00:00:00' THEN
SET NEW.CREATED_TIME = NOW();;
END IF;;
END;
En el caso de su secuencia de comandos SQL, lo siguiente debería funcionar con Play 2.1 y superior (tenga en cuenta que no lo he probado):
DROP TRIGGER IF EXISTS invoice_line_insert;
CREATE TRIGGER invoice_line_insert AFTER INSERT
ON invoice_line FOR EACH ROW
BEGIN
IF NEW.type = "DELIVERY" THEN
UPDATE invoice
SET invoice.etdelivery_amount = invoice.etdelivery_amount + NEW.amount
WHERE invoice.id_invoice = NEW.invoice_parent_id_invoice;;
ELSE
UPDATE invoice
SET invoice.etexpense_amount = invoice.etexpense_amount + NEW.amount
WHERE invoice.id_invoice = NEW.invoice_parent_id_invoice;;
END IF;;
UPDATE invoice
SET invoice.vatamount = (NEW.amount * ((
SELECT vat.rate
FROM vat
WHERE vat.id_vat = NEW.vat_id_vat
) / 100)) + invoice.vatamount
WHERE invoice.id_invoice = NEW.invoice_parent_id_invoice;;
UPDATE invoice
SET invoice.itamount = invoice.vatamount +
invoice.etdelivery_amount +
invoice.etexpense_amount
WHERE invoice.id_invoice = NEW.invoice_parent_id_invoice;;
END;