执行下面提到的脚本时出现错误
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '$$
DROP PROCEDURE IF EXISTS `GetTopParentGivenDepth`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `GetTopParentGivenDepth`(GivenDepth INT)
BEGIN
DECLARE X,Y,x1,x2 INT;
SET X = 0;
SET Y = 1;
SET @SQ = 'SELECT DISTINCT A0.id FROM categories A0';
WHILE Y < GivenDepth DO
SET @SQ = CONCAT(@SQ,' INNER JOIN categories A',Y,' ON A',X,'.id = A',Y,'.parent_id');
SET X = Y;
SET Y = X + 1;
END WHILE;
SET @SQ = CONCAT(@SQ,' WHERE A0.parent_id = 0');
SELECT @SQ;
PREPARE stmt FROM @SQ;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END$$
最佳答案
创建过程之前缺少 DELIMITER
DELIMITER $$
DROP PROCEDURE IF EXISTS `GetTopParentGivenDepth`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `GetTopParentGivenDepth`(GivenDepth INT)
BEGIN
DECLARE X,Y,x1,x2 INT;
SET X = 0;
SET Y = 1;
SET @SQ = 'SELECT DISTINCT A0.id FROM categories A0';
WHILE Y < GivenDepth DO
SET @SQ = CONCAT(@SQ,' INNER JOIN categories A',Y,' ON A',X,'.id = A',Y,'.parent_id');
SET X = Y;
SET Y = X + 1;
END WHILE;
SET @SQ = CONCAT(@SQ,' WHERE A0.parent_id = 0');
SELECT @SQ;
PREPARE stmt FROM @SQ;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END$$
DELIMITER ;
关于mysql - 在mysql中创建存储过程时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34064477/