【问题标题】:Mysql Stops running when this stored procedure is executed执行此存储过程时,Mysql 停止运行
【发布时间】:2013-06-17 10:45:36
【问题描述】:

早安,

这是这个问题的后续。 mysqld.exe keeps crashing.

我已将崩溃范围缩小到单个存储过程,当该存储过程执行时,它似乎会崩溃。

我已经把它从原来的状态拆分为三个存储过程。

spProductGroupMenu的主要程序如下:

DELIMITER $$

USE `phclothing`$$

DROP PROCEDURE IF EXISTS `spProductGroupMenu`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `spProductGroupMenu`(
spGrp VARCHAR(3),
spProductType ENUM('clothing','parts')
)
BEGIN
DECLARE qryType ENUM('group','manufacturer','nothing');


IF spProductType='clothing' THEN
    SET qryType = (SELECT 
                (CASE WHEN 
                    (SELECT 
                        COUNT(DISTINCT(productGroup)) 
                    FROM 
                        tblclothingitems 
                    WHERE 
                        productGroup=spGrp)>0 
                    THEN 'group' ELSE
                (CASE WHEN 
                    (SELECT 
                        COUNT(DISTINCT(productManufacturer)) 
                    FROM 
                        tblclothingitems 
                    WHERE 
                        productManufacturer=spGrp)>0
                    THEN 'manufacturer' ELSE
                'nothing' END) END));
ELSE
    SET qryType = (SELECT 
                (CASE WHEN 
                    (SELECT 
                        COUNT(DISTINCT(productGroup)) 
                    FROM 
                        tblpartsitems 
                    WHERE 
                        productGroup=spGrp)>0 
                    THEN 'group' ELSE
                (CASE WHEN 
                    (SELECT 
                        COUNT(DISTINCT(productManufacturer)) 
                    FROM 
                        tblpartsitems 
                    WHERE 
                        productManufacturer=spGrp)>0
                    THEN 'manufacturer' ELSE
                'nothing' END) END));
END IF;



IF qryType='manufacturer' THEN

    CALL spPGMMans(spGrp,spProductType,qryType); ************

ELSEIF qryType='group' THEN

    CALL spPGMGrp(spGrp,spProductType,qryType); ************
ELSE
    -- This is not going to be used
    SELECT
        DISTINCT(productgroup) grpCode,
        (CASE WHEN spProductType='clothing' THEN
            CONCAT('/',grpSEO,'.html') 
        ELSE
            CONCAT(spProductType,'/',grpSEO,'.html') END)seoLink,
        pageH1 seoLinkTitle,
        'allGroups' entryType,
        qryType
    FROM
        tblclothingitems ci
    LEFT JOIN
        tblclothinggroups cg
    ON
        ci.productGroup = cg.grpcode
    UNION ALL
    SELECT
        DISTINCT(productManufacturer) grpCode,
        (CASE WHEN spProductType='clothing' THEN            
            cm.urlExt 
        ELSE
            CONCAT(spProductType,'/',cm.urlExt) END)seoLink,
        manTitle seoLinkTitle,
        'allMans' entryType,
        qryType
    FROM
        tblclothingitems ci
    LEFT JOIN
        tblclothingmanufacturers cm
    ON
        ci.productManufacturer = cm.manCode
    ORDER BY entryType, seoLinkTitle ASC;   
END IF;
END$$

分隔符;

这曾经由一系列查询组成,根据传入的内容联合所有语句,但这引发了 mysql 服务器崩溃的警报。所以 ************ 是我将存储过程分成三个的地方。这些存储过程中的每一个都以自己的方式在服务器上运行,但由于某种原因,当调用此存储过程时,服务器就会崩溃并停止运行。

我一直在检查日志,正是在运行此存储过程时,与服务器的连接才开始。

如果有人对为什么会发生这种情况有任何线索,或者如果有人遇到过这种情况,请告诉我。

非常感谢。

格雷厄姆

【问题讨论】:

    标签: stored-procedures mysql


    【解决方案1】:

    好吧,这显然很奇怪。预感之后,我点击了存储过程中每一行的末尾并删除了所有空格,以防万一有任何错误的不可打印字符导致问题,低并且看起来它似乎修复了它。

    为了测试该理论,我将存储过程再次反转回导致服务器崩溃的点。我在服务器上运行它,它也能正常工作,这显然很奇怪。

    不用说我完全傻眼了,为什么会发生这个错误,但只能假设它是存储过程中行尾的非打印字符。

    如果你看的话,干杯! 格雷厄姆

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多