我想在MySQL中创建一个存储过程,但是我遇到了一个错误1064:
错误代码:1064 您的SQL语法有误;请检查与您的MariaDB服务器版本相对应的手册,以获取正确的语法使用方法,位于第2行附近的 'ZID_TRANSAKSI VARCHAR(64), ZTGL1 DATE, ZTGL2 DATE ) BEGIN DECLARE ...' 查询:DELIMITER; 错误代码:1064 您的SQL语法有误;请检查与您的MariaDB服务器版本相对应的手册,以获取正确的语法使用方法,位于第1行附近的 'DELIMITER'
这是我想创建的存储过程的查询:
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;
为什么我的查询会出现错误代码:1064
?我该如何修复它?
我之前使用ORACLE数据库,现在刚开始使用MySQL。如果有任何我不知道的差异,请告诉我。
P粉8832233282023-09-13 00:09:27
DELIMITER
只在您在命令行客户端内创建存储过程时需要,以区分常规分隔符和BEGIN END块内的分隔符。
在您的示例中,您定义了一个分隔符$$ CREATE PROCEDURE HITUNGMASUK
,这可能不是您真正想要的。
DELIMITER $$
需要作为单个命令执行,而不是与存储过程定义连接。
DELIMITER $$ CREATE PROCEDURE() BEGIN ... END $$