2013-06-17 3 views
0

Morning Guys,Mysql Остановка работает, когда эта хранимая процедура выполнена

Это вопрос из этого вопроса. 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;

Это используется, чтобы состоять из серии запросов с объединением всех операторов в зависимости от того, что было передано, но это вызвало тревогу по поводу падения сервера mysql. Итак, где ************ есть где я разделил хранимую процедуру на три. Каждая из этих хранимых процедур выполняется на сервере сама по себе, но по какой-то причине, когда эта хранимая процедура называется вызываемой, сервер просто падает и прекращает работу.

Я проверяю журналы в течение всего времени, и когда эта хранимая процедура запускается, происходит соединение с сервером.

Если у кого есть какие-либо подсказки относительно того, почему это может произойти, или если у кого-то был опыт в этой ситуации, пожалуйста, дайте мне знать.

Большое спасибо заранее.

Грэм

ответ

1

Хорошо, это явно очень странно. После догадки я щелкнул до конца каждой строки хранимой процедуры и удалил все пустое пространство на всякий случай, если бы были ошибочные непечатаемые символы, которые вызывали проблему, низко и созерцало, казалось, это исправить.

Чтобы проверить теорию, я снова вернул хранимую процедуру обратно к точке, когда это вызвало сбой сервера. Я запускал его на сервере, и он тоже работал, что явно очень странно.

Излишне говорить, что я совершенно не знаю, почему эта ошибка произошла в первую очередь, но может только предположить, что это был непечатаемый символ в конце строки в хранимой процедуре.

Приветствия, если вы посмотрели! Graham

+0

Приветствует вас. – 0xCAFEBABE

Смежные вопросы