Изглежда, че това е дубликат на Възпроизвеждане на еволюция на рамка 2.0 и създаване на тригер (Обърнете внимание, че според мен по-добрият отговор е този, публикуван от Роджър на 24 май 2013 г., т.е. връзката по-горе)
"разделител" не може да се използва в текста на еволюционния скрипт; Изглежда не мога да намеря никаква документация защо това е така. Но може би това е свързано с факта, че "разделител" не е SQL израз, а SQL свойство.
Въпреки това, има решение в раздел „Еволюции“ на Play 2 docs :
Play разделя вашите .sql файлове на поредица от изрази, разделени с точка и запетая, преди да ги изпълни един по един в базата данни. Така че, ако трябва да използвате точка и запетая в израз, избягайте от него, като въведете;; вместо;. Например, INSERT INTO пунктуация(име, знак) VALUES ('точка и запетая', ';;');.
Така че във вашия случай,
- Премахнете свойството „разделител“ и
- Използвайте „;;“ вместо ";" за вашето вътрешно SQL изрази, така че да се попречи на анализатора на Play 2 да изпълнява тези вътрешни SQL оператори отделно.
Ето един пример, който успешно тествах в Play 2.3 и 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;
В случай на вашия SQL скрипт, следното трябва да работи с Play 2.1 и по-нова версия (Обърнете внимание, че не съм го тествал):
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;