Zdá se, že jde o duplikát evoluce rámce Play 2.0 a vytvoření spouštěče (Všimněte si, že podle mého názoru je lepší odpověď ta, kterou napsal Roger 24. května 2013, tedy odkaz výše)
"oddělovač" nelze použít v textu evolučního skriptu; Nemohu najít žádnou dokumentaci, proč tomu tak je. Ale možná to souvisí se skutečností, že "oddělovač" není příkaz SQL, ale vlastnost SQL.
Existuje však řešení v sekci Evolutions dokumentu Play 2 :
Play rozdělí vaše soubory .sql na řadu příkazů oddělených středníkem a poté je spustí jeden po druhém v databázi. Pokud tedy potřebujete v příkazu použít středník, ukončete jej zadáním;; namísto;. Například INSERT INTO interpunkce (jméno, znak) VALUES ('středník', ';;');.
Takže ve vašem případě
- Odeberte vlastnost "delimiter" a
- Použijte ";;" namísto ";" pro vaše vnitřní Příkazy SQL, aby se zabránilo analyzátoru Play 2 provádět tyto vnitřní příkazy SQL samostatně.
Zde je příklad, který jsem úspěšně testoval v Play 2.3 a 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;
V případě vašeho SQL skriptu by následující mělo fungovat se službou Play 2.1 a vyšší (Všimněte si, že jsem to netestoval):
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;