Dari komentar:
Bukan begitu cara kerjanya.
Untuk memahami alasannya, Anda perlu memahami bagaimana mysql
CLI -- dan program lain yang dapat membaca dan mengeksekusi file dump seperti ini -- sebenarnya menanganinya.
DELIMITER
bukan sesuatu yang dimengerti server.
DELIMITER
digunakan untuk memberi tahu pengurai sisi klien apa pembatas pernyataan saat ini seharusnya, sehingga parser sisi klien dapat membagi pernyataan dengan benar dan mengirimkannya satu per satu ke server untuk dieksekusi.
Dari dokumen. Perhatikan baik-baik bahwa mysql
, setiap kali digunakan di sini, mengacu pada mysql
utilitas klien -- bukan servernya.
Jadi, untuk menangani file seperti itu, Anda memerlukan parser sisi klien yang melakukan hal yang sama mysql
tidak... dan di sini, kode yang Anda tulis adalah (harus) parser pernyataan sisi klien. Jadi Andalah yang perlu menulis logika untuk menangani pembatas.
Untuk melakukan apa yang Anda inginkan, Anda harus menafsirkan DELIMITER
pernyataan, gunakan untuk melacak pembatas pernyataan saat ini, tetapi jangan mengirimkannya ke server.
Kemudian, Anda harus membaca input satu baris pada satu waktu, menyangga apa yang telah Anda baca, hingga Anda menemukan pembatas yang ditentukan di akhir baris, dan mengirim pernyataan yang dihasilkan ke server -- tidak termasuk pembatas pernyataan yang sebenarnya dari apa yang Anda kirim... jadi, misalnya, Anda tidak akan mengirim akhiran $$
setelah badan prosedur (kecuali pembatas pernyataan saat ini adalah ;
, yang dapat Anda kirim atau tidak kirim -- server tidak peduli.) Kemudian kosongkan buffer dan mulai membaca lagi hingga Anda melihat contoh pembatas lainnya (dan mengirim pernyataan ke server) atau mencocokkan DELIMITER
pernyataan dan atur variabel pembatas kode Anda saat ini untuk mencocokkannya sehingga Anda mengidentifikasi akhir pernyataan berikutnya dengan benar.