Ich möchte eine gespeicherte Prozedur in MySQL erstellen, bin aber auf den Fehler 1064 gestoßen:
错误代码:1064 您的SQL语法有误;请检查与您的MariaDB服务器版本相对应的手册,以获取正确的语法使用方法,位于第2行附近的 'ZID_TRANSAKSI VARCHAR(64), ZTGL1 DATE, ZTGL2 DATE ) BEGIN DECLARE ...' 查询:DELIMITER; 错误代码:1064 您的SQL语法有误;请检查与您的MariaDB服务器版本相对应的手册,以获取正确的语法使用方法,位于第1行附近的 'DELIMITER'
Dies ist die Abfrage für die gespeicherte Prozedur, die ich erstellen möchte:
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;
Warum erscheint meine Anfrage错误代码:1064
? Wie kann ich es reparieren?
Ich habe vorher die ORACLE-Datenbank verwendet und jetzt habe ich gerade angefangen, MySQL zu verwenden. Wenn es Unterschiede gibt, die mir nicht bekannt sind, lassen Sie es mich bitte wissen.
DELIMITER
只在您在命令行客户端内创建存储过程时需要,以区分常规分隔符和BEGIN END块内的分隔符。在您的示例中,您定义了一个分隔符
$$ CREATE PROCEDURE HITUNGMASUK
,这可能不是您真正想要的。DELIMITER $$
需要作为单个命令执行,而不是与存储过程定义连接。