0

早安伙计们,

这是这个问题的后续。 mysqld.exe 不断崩溃

我已经将崩溃范围缩小到一个存储过程,当这个存储过程被执行时,它似乎就崩溃了。

我已将其从原始状态拆分为三个存储过程。

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 服务器崩溃的警报。所以 ************ 是我将存储过程分成三个的地方。这些存储过程中的每一个都以自己的方式在服务器上运行,但是由于某种原因,当调用此存储过程时,服务器就会崩溃并停止运行。

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

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

提前谢谢了。

格雷厄姆

4

1 回答 1

1

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

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

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

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

于 2013-06-17T11:45:31.093 回答