Maison > Questions et réponses > le corps du texte
Je souhaite créer une procédure stockée dans MySQL, mais j'ai rencontré une erreur 1064 :
错误代码:1064 您的SQL语法有误;请检查与您的MariaDB服务器版本相对应的手册,以获取正确的语法使用方法,位于第2行附近的 'ZID_TRANSAKSI VARCHAR(64), ZTGL1 DATE, ZTGL2 DATE ) BEGIN DECLARE ...' 查询:DELIMITER; 错误代码:1064 您的SQL语法有误;请检查与您的MariaDB服务器版本相对应的手册,以获取正确的语法使用方法,位于第1行附近的 'DELIMITER'
Voici la requête pour la procédure stockée que je souhaite créer :
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;
Pourquoi ma requête apparaît-elle错误代码:1064
? Comment puis-je le réparer ?
J'ai déjà utilisé la base de données ORACLE et maintenant je viens de commencer à utiliser MySQL. S'il y a des différences dont je ne suis pas au courant, veuillez me le faire savoir.
P粉8832233282023-09-13 00:09:27
DELIMITER
Requis uniquement si vous créez une procédure stockée dans le client de ligne de commande, pour faire la distinction entre les délimiteurs réguliers et les délimiteurs à l'intérieur des blocs BEGIN END.
Dans votre exemple, vous définissez un séparateur $$ CREATE PROCEDURE HITUNGMASUK
qui n'est probablement pas ce que vous voulez vraiment.
DELIMITER $$
Doit être exécuté comme une commande unique, non connectée à une définition de procédure stockée.
DELIMITER $$ CREATE PROCEDURE() BEGIN ... END $$