Detta verkar vara en dubblett av Spela framework 2.0-utvecklingar och skapa trigger (Observera att enligt min åsikt är det bättre svaret det som Roger postade den 24 maj 2013, dvs. länken ovan)
"avgränsare" kan inte användas i evolutionens skripttext; Jag kan inte hitta någon dokumentation om varför det är så. Men det kanske har att göra med att "avgränsare" inte är en SQL-sats utan en SQL-egenskap.
Det finns dock en lösning i avsnittet Evolutions i Play 2 docs :
Play delar upp dina .sql-filer i en serie semikolonavgränsade satser innan de körs en i taget mot databasen. Så om du behöver använda semikolon i ett uttalande, undvik det genom att ange;; istället för;. Till exempel, INSERT INTO interpunktion(namn, tecken) VÄRDEN ('semikolon', ';;');.
Så i ditt fall,
- Ta bort egenskapen "avgränsare" och
- Använd ";;" istället för ";" för ditt inre SQL-satser, för att förhindra att Play 2-parsern exekverar dessa inre SQL-satser separat.
Här är ett exempel som jag framgångsrikt har testat i Play 2.3 och 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;
När det gäller ditt SQL-skript bör följande fungera med Play 2.1 och högre (Observera att jag inte har testat det):
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;