Mysql在执行此存储过程时停止运行

时间:2013-06-17 10:45:37

标签: stored-procedures mysql

Morning Guys,

这是这个问题的后续内容。 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$$

DELIMITER;

这曾经包含一系列带有union所有语句的查询,具体取决于传入的内容,但这引发了关于mysql服务器崩溃的警报。所以************在哪里我将存储过程分成三个。这些存储过程中的每一个都在服务器上运行,但由于某种原因,当调用此存储过程时,服务器会崩溃并停止运行。

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

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

非常感谢提前。

格雷厄姆

1 个答案:

答案 0 :(得分:1)

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

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

毋庸置疑,我完全不知道为什么这个错误首先发生,但只能假定它是存储过程中一行末尾的非打印字符。

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