【问题标题】:Error in creating store procedure in mysql在mysql中创建存储过程时出错
【发布时间】:2015-12-03 11:12:08
【问题描述】:

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

您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 靠近'$$

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$$

【问题讨论】:

    标签: mysql database stored-procedures


    【解决方案1】:

    在创建过程之前缺少 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 ;
    

    【讨论】:

      猜你喜欢
      • 2015-05-09
      • 2018-03-23
      • 2020-12-02
      • 1970-01-01
      • 2016-11-28
      • 2010-10-12
      相关资源
      最近更新 更多