我想在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。如果有任何我不知道的差异,请告诉我。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
DELIMITER只在您在命令行客户端内创建存储过程时需要,以区分常规分隔符和BEGIN END块内的分隔符。在您的示例中,您定义了一个分隔符
$$ CREATE PROCEDURE HITUNGMASUK,这可能不是您真正想要的。DELIMITER $$需要作为单个命令执行,而不是与存储过程定义连接。