Rumah > Soal Jawab > teks badan
Saya ingin mencipta prosedur tersimpan dalam MySQL, tetapi saya mengalami ralat 1064:
错误代码:1064 您的SQL语法有误;请检查与您的MariaDB服务器版本相对应的手册,以获取正确的语法使用方法,位于第2行附近的 'ZID_TRANSAKSI VARCHAR(64), ZTGL1 DATE, ZTGL2 DATE ) BEGIN DECLARE ...' 查询:DELIMITER; 错误代码:1064 您的SQL语法有误;请检查与您的MariaDB服务器版本相对应的手册,以获取正确的语法使用方法,位于第1行附近的 'DELIMITER'
Ini adalah pertanyaan untuk prosedur tersimpan yang ingin saya buat:
DELIMITER $$ CREATE PROCEDURE HITUNGMASUK ( ZID_TRANSAKSI VARCHAR(64), ZTGL1 DATE, ZTGL2 DATE ) BEGIN DECLARE done INT DEFAULT FALSE; DECLARE PTAHUN VARCHAR(4); DECLARE PBULAN VARCHAR(2); DECLARE PHITUNG INTEGER DEFAULT 0; DECLARE CEKKARTUSTOK INTEGER DEFAULT 0; DECLARE PID_BARANG VARCHAR(255) DEFAULT 'X'; DECLARE PPANJANG INTEGER DEFAULT 0; DECLARE CEKKARTUSTOK CURSOR FOR SELECT B.id_barang, SUM(B.total_Panjang) AS PANJANG FROM transaksi_gudang A, line_item_barang B WHERE A.ID_Transaksi LIKE ZID_TRANSAKSI AND A.Tanggal BETWEEN ZTGL1 AND ZTGL2 AND B.ID_GR = A.ID_Transaksi GROUP BY B.id_barang; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; PTAHUN = YEAR(ZTGL1); PBULAN = MONTH(ZTGL1); OPEN CEKKARTUSTOK; teams_loop: LOOP FETCH CEKKARTUSTOK INTO PID_BARANG,PPANJANG; IF PID_BARANG = 'X' THEN INSERT INTO kartustok(TAHUN,BULAN,ID_BARANG,KODE_GUDANG,MASUK) VALUES (); END IF; IF done THEN LEAVE teams_loop; END IF; END LOOP; CLOSE CEKKARTUSTOK; SELECT FROM kartustok C WHERE C.TAHUN = PTAHUN AND C.BULAN = PBULAN AND C.ID_BARANG = P END $$ DELIMITER;
Mengapa pertanyaan saya muncul错误代码:1064
? Bagaimana saya boleh membetulkannya?
Saya menggunakan pangkalan data ORACLE sebelum ini, dan sekarang saya baru mula menggunakan MySQL. Jika terdapat sebarang perbezaan yang saya tidak sedar, sila beritahu saya.
P粉8832233282023-09-13 00:09:27
DELIMITER
Hanya diperlukan jika anda membuat prosedur tersimpan dalam klien baris arahan, untuk membezakan antara pembatas biasa dan pembatas dalam blok BEGIN END.
Dalam contoh anda, anda mentakrifkan pemisah $$ CREATE PROCEDURE HITUNGMASUK
yang mungkin bukan yang anda mahukan sebenarnya.
DELIMITER $$
Perlu dilaksanakan sebagai satu arahan, tidak disambungkan kepada definisi prosedur tersimpan.
DELIMITER $$ CREATE PROCEDURE() BEGIN ... END $$