Laksanakan prosedur tersimpan yang mengandungi skrip SQL menggunakan Rangka Kerja Robot
P粉031492081
P粉031492081 2023-08-28 22:08:52
0
1
499
<p>Saya mahu menjalankan skrip sql yang mengandungi pangkalan data dan penciptaan jadual serta penciptaan prosedur tersimpan. Tetapi apabila saya cuba menjalankan skrip sql dalam <strong>pustaka pangkalan data</strong> menggunakan kata kunci <strong>execute sql</strong> <pre class="brush:php;toolbar:false;">ProgrammingError: (1064, "Anda mempunyai ralat dalam sintaks SQL anda; semak manual yang sepadan dengan versi pelayan MariaDB anda untuk sintaks yang betul untuk digunakan berhampiran 'DELIMITER $$n BUAT ATAU PROSEDUR GANTI `proc_GetCustomerDetails`(n I...' di baris 2")</pre> <p>Sebelum prosedur tersimpan, saya mempunyai <strong>pembatas</strong>: </p> <pre class="brush:php;toolbar:false;">DELIMITER $$ BUAT ATAU GANTIKAN PROSEDUR `proc_GetCustomerDetails`( DALAM CustomerNbr LONGTEXT, DALAM LANG VARCHAR(5) ) DETERMINISTIK BERMULA JIKA Lang ADALAH NULL MAKA TETAPKAN lang = "fin"; TAMAT JIKA; PILIH * daripada dbname.customer; TAMAT;$$ DELIMITER ;</pre> <p>Jika saya mengulas bahagian prosedur yang disimpan, fail sql akan berjalan tanpa ralat bersama-sama dengan penyataan penciptaan jadual yang lain. </p> <p>Saya mencari di Google dan tidak menemui soalan berkaitan. Saya nampak kami mempunyai kata kunci yang memanggil prosedur tersimpan. Tetapi saya mahu meletakkan penciptaan jadual dan prosedur tersimpan dalam fail sql yang sama dan menjalankannya. Saya menggunakan MariaDB untuk tugasan ini. </p> <p><strong>Perpustakaan digunakan</strong>: </p> <ul> <li>pymysql</li> <li>Perpustakaan Pangkalan Data Rangka Kerja Robot</li> </ul> <p>Jika saya menjalankan fail sql menggunakan HeidiSQL, ia berjalan dalam prosedur tersimpan dan pembatas tanpa sebarang ralat. Ini bermakna tiada ralat sql. </p> <p><strong>Bolehkah sesiapa memberitahu saya cara untuk membetulkannya? </strong></p>
P粉031492081
P粉031492081

membalas semua(1)
P粉268284930

DELIMITER ialah kenyataan pelanggan sahaja, pelayan tidak menyokongnya, maka ralat berlaku. Penyelesaian - padamkannya.

Berikut ialah soalan dengan jawapan yang sangat baik yang menerangkan apa itu DELIMITER dan mengapa ia diperlukan.

Ringkasnya - apabila anda bekerja dengan pelanggan anda memerlukan cara untuk menunjukkan kepadanya "ini bukan pernyataan yang dilaksanakan serta-merta, ini masih hanya satu baris dalam prosedur tersimpan yang anda akan hantar ke pelayan" - jadi anda memberitahu (Pelanggan) "DELIMITER antara penyata ialah $$ buat sementara waktu". Pelayan tidak memerlukan/mengambil berat tentang perkara ini - ia tahu bahawa segala-galanya di antara CREATE PROCEDURE, BEGIN, END ialah pernyataan yang bersambung, satu blok.

Apabila anda menyambung ke pangkalan data melalui API (pymysql), berbanding dengan klien interaktif (shell, heidisql, dll.) - anda menghantar SP sebagai sebahagian dan tidak ada cara untuk menjalankan kenyataannya satu demi satu, jadi DELIMITER tidak diperlukan, Pelayan tidak menyokong arahan ini dan akan menghasilkan ralat. Padamkannya.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan