Dit lijkt een duplicaat te zijn van Spel framework 2.0-evoluties af en creëer trigger (Merk op dat, naar mijn mening, het betere antwoord het antwoord is dat door Roger op 24 mei 2013 is gepost, d.w.z. de link hierboven)
"scheidingsteken" kan niet worden gebruikt in de tekst van het evolutiescript; Ik kan geen documentatie vinden waarom dit zo is. Maar misschien heeft het te maken met het feit dat "delimiter" geen SQL-statement is, maar een SQL-eigenschap.
Er is echter een oplossing in de Evolutions-sectie van Play 2-documenten :
Play splitst uw .sql-bestanden op in een reeks door puntkomma's gescheiden instructies voordat ze één voor één worden uitgevoerd op de database. Dus als je een puntkomma in een statement moet gebruiken, ontsnap er dan aan door;; in plaats van;. Bijvoorbeeld INSERT INTO interpunctie (naam, teken) VALUES ('puntkomma', ';;');.
Dus in jouw geval
- Verwijder de eigenschap "scheidingsteken" en
- Gebruik ";;" in plaats van ";" voor je innerlijke SQL-instructies, om te voorkomen dat de Play 2-parser deze interne SQL-instructies afzonderlijk uitvoert.
Hier is een voorbeeld dat ik met succes heb getest in Play 2.3 en 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;
In het geval van uw SQL-script zou het volgende moeten werken met Play 2.1 en hoger (merk op dat ik het niet heb getest):
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;