Ini tampaknya merupakan duplikat dari Mainkan evolusi framework 2.0 dan buat pemicu (Perhatikan bahwa, menurut saya, jawaban yang lebih baik adalah yang diposting oleh Roger pada 24 Mei 2013, yaitu tautan di atas)
"pembatas" tidak dapat digunakan dalam teks skrip evolusi; Sepertinya saya tidak dapat menemukan dokumentasi mengapa demikian. Tapi mungkin ini ada hubungannya dengan fakta bahwa "pembatas" bukanlah pernyataan SQL tetapi properti SQL.
Namun, ada solusi di bagian Evolusi dari dokumen Play 2 :
Play membagi file .sql Anda menjadi serangkaian pernyataan yang dipisahkan titik koma sebelum mengeksekusinya satu per satu terhadap database. Jadi, jika Anda perlu menggunakan titik koma dalam pernyataan, hindari dengan memasukkan;; dari pada;. Misalnya, INSERT INTO punctuation(name, character) VALUES ('titik koma', ';;');.
Jadi dalam kasus Anda,
- Hapus properti "pembatas", dan
- Gunakan ";;" dari pada ";" untuk batin . Anda Pernyataan SQL, untuk mencegah parser Play 2 mengeksekusi pernyataan SQL bagian dalam ini secara terpisah.
Berikut adalah contoh yang berhasil saya uji di Play 2.3 dan 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;
Dalam hal skrip SQL Anda, berikut ini akan berfungsi dengan Play 2.1 dan di atasnya (Perhatikan bahwa saya belum mengujinya):
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;