Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Kesalahan pernyataan pembatas MySQL

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,

  1. Hapus properti "pembatas", dan
  2. 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;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ganti nilai dalam string yang dibatasi koma di MySQL?

  2. Kolom Tidak Diizinkan kesalahan saat memasukkan baris menggunakan nilai urutan

  3. Bagaimana menemukan Indeks yang Hilang di MySQL?

  4. MySQL menggunakan Sum dan Case

  5. JDBC Hapus &Sisipkan menggunakan batch