mysql - 在mysql中创建存储过程时出错

标签 mysql database stored-procedures

执行下面提到的脚本时出现错误

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/

相关文章:

mysql - mysql_ssl_rsa_setup 从哪里获取 OpenSSL 文件?

php - 在 MySQL 中选择一些特殊字符时的奇怪行为

php - 如何在选择前检查字段?

php - 删除PHP MySQL查询错误

mysql - 如何在mysql中创建程序来选择记录?

mysql更新(我想更改字符串的最后两个字符)

mysql - SQL查询以查找酒店的空闲房间

database - 比较超过 110,000 项的四个大型列表

c# - 迁移到较新版本的连接器时,MySqlAdapter 引发致命异常

sql - 如何在 Where 子句中使用别名?