0

お前らおはよう、

これはこの質問の続きです。 mysqld.exe がクラッシュし続けます。

クラッシュを 1 つのストアド プロシージャに絞り込みましたが、このストアド プロシージャが実行されたときに失敗したように見えます。

元の状態から 3 つのストアド プロシージャに分割しました。

メイン プロシージャ 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 サーバーが落ちるという警告が発生しました。したがって、************ は、ストアド プロシージャを 3 つに分割した場所です。これらのストアド プロシージャはそれぞれサーバー上で独自に実行されますが、何らかの理由でこのストアド プロシージャが呼び出されると、サーバーが停止して実行を停止します。

全体を通してログをチェックしており、サーバーへの接続が確立されるのは、このストアド プロシージャが実行されたときです。

なぜこれが起こっているのか、またはこのような状況を経験したことがある人がいる場合は、私に知らせてください.

よろしくお願いします。

グラハム

4

1 に答える 1

1

わかりました、これは明らかに非常に奇妙です。予感に続いて、ストアド プロシージャのすべての行の最後をクリックし、印刷できない誤った文字が問題を引き起こしている場合に備えて、すべての空白を削除しました。

理論をテストするために、ストアド プロシージャを元に戻して、サーバーがクラッシュした時点に戻しました。サーバー上で実行したところ、同様に機能しましたが、これは明らかに非常に奇妙です。

言うまでもなく、このエラーが最初に発生した理由については完全に唖然としていますが、ストアド プロシージャの行末にある非印刷文字であると推測することしかできません。

見てくれたら乾杯!グラハム

于 2013-06-17T11:45:31.093 に答える