Хранимые процедуры, написанные в MySQL 5.5.8, не работают в 5.1 - PullRequest
2 голосов
/ 07 февраля 2012

У меня есть несколько хранимых процедур и триггер, которые отлично работают в MySQL 5.5.8, но по какой-то причине не работают в 5.1. Описаний ошибок мне недостаточно, чтобы понять проблему. Вот код и ошибки.

CREATE PROCEDURE `cg_getMatchingContent`( 
MatchTerm VARCHAR(255),
MaxResults INT)
BEGIN
SELECT * FROM (
    SELECT t.*, INSTR(t.`Title`,MatchTerm) as Pos 
    FROM cg_content t ) c
WHERE Pos>0 ORDER BY Pos LIMIT 0, MaxResults;

END 

Ошибка: у вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, для правильного синтаксиса для использования рядом с 'MaxResults' в строке 8

DELIMITER ;;
CREATE TRIGGER `cg`.`cg_content_UrlDup_ConstTrig`
BEFORE INSERT ON `cg`.`cg_content`
FOR EACH ROW
Begin
DECLARE errorString VARCHAR(500);
DECLARE insert_error CONDITION FOR SQLSTATE '99001';      

IF new.Url = '' THEN
        SET errorString = CONCAT('Url cannot be blank
Title: ' , new.Title);  
     SIGNAL insert_error
        SET MESSAGE_TEXT=errorString; 
END if;

IF Exists(SELECT id FROM cg.cg_content WHERE Url=new.Url) THEN
     SET errorString = CONCAT('Url is not unique
Title: ' , new.Title  , '
Url: ' + new.Url);
     SIGNAL insert_error
        SET MESSAGE_TEXT=errorString;

End if;
End ;;

Ошибка: у вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с 'insert_error SET MESSAGE_TEXT = errorString; END if; IF 'в строке 10

Ответы [ 2 ]

4 голосов
/ 07 февраля 2012

Из документов :

В хранимых программах параметры LIMIT могут быть заданы с использованием целочисленных стандартных параметров или локальных переменных, начиная с MySQL 5.5.6.

5.1 не поддерживает переменные в LIMIT и OFFSET.

2 голосов
/ 07 февраля 2012

Второй легко понять, трудно исправить. Команды SIGNAL и RESIGNAL были введены в MySQL 5.5. Вы не можете легко конвертировать его в 5.1. Один из способов сделать это - выполнить запрос с ошибками. Например, SELECT из несуществующей таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...