2012-02-07 19 views
2

我有一些存儲過程和一個在MySQL 5.5.8中工作良好但由於某種原因在5.1中不起作用的觸發器。錯誤描述不足以讓我找出問題所在。這裏是代碼和錯誤。在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行

+0

如果'MySQL 5.1'會發出有意義的錯誤,例如:「似乎你正試圖在LIMIT中使用局部變量,對不起,我們目前還不支持這個功能。 」。 – Quassnoi 2012-02-07 19:34:43

回答

2

第二個很容易理解,很難解決。在MySQL 5.5中引入了SIGNALRESIGNAL命令。您無法輕鬆將其轉換爲5.1。一種做法是,運行一個錯誤查詢。例如來自不存在的表的SELECT

+0

感謝您的解決方法。 – i8abug 2012-02-07 19:37:28

4

docs

Within stored programs, LIMIT parameters can be specified using integer-valued routine parameters or local variables as of MySQL 5.5.6 .

5.1做不支持LIMITOFFSET中的變量。

+1

可以通過在程序中創建準備好的語句來解決 – Mchl 2012-02-07 19:32:33

+0

感謝您的快速響應。我希望我可以給你和Mchl兩個正確的答案,但我只是要投擲一枚硬幣 – i8abug 2012-02-07 19:37:17

+1

@ i8abug:Mchl爲我的問題提出了一個解決方案,我對他的問題也沒有做過。 – Quassnoi 2012-02-07 19:38:51