2012-08-01 56 views
4

我越來越想宣佈在MySQL中一個新的存儲功能(服務器版本:5.5.13)當出現錯誤錯誤聲明整型變量存儲功能

基本上,我有一個大表將取決於其分類串他們如何開始。我需要的功能(根據用戶輸入)的字符串,然後告訴你該字符串的分類通過分類搜索數據庫。這是一個有點像LIKE查詢,除了逆,因爲它是一個包含完整的字符串用戶輸入和數據庫包含被搜索的字符串。希望是有道理的!

背後做工精細,我已經寫了/在PHP開發這和它精美的作品,試圖轉換成一個存儲功能,我從MySQL得到一個錯誤,但是這時候的概念和邏輯。該函數的代碼是:

delimiter $ 

DROP FUNCTION IF EXISTS get_string_class$ 
CREATE FUNCTION get_string_class(mystring VARCHAR(15)) 

RETURNS VARCHAR(15) 
READS SQL DATA 
BEGIN 

DECLARE i INT; 
SET i = 2; 

DECLARE mystringlength INT; 
SET mystringlength = LENGTH(mystring); 

DECLARE segment VARCHAR(15); 
DECLARE String_Class VARCHAR(15); 
SET String_Class = NULL; 

WHILE i <= mystringlength DO 

    SET segment = LEFT(mystring, i); 

    SET String_Class = (SELECT String_Class FROM string_class_list WHERE String_Begins = segment); 

    IF SELECT FOUND_ROWS() = 1 THEN 
     RETURN String_Class 
    END IF; 

    i = i + 1; 

END WHILE; 

RETURN String_Class; 

END$ 
delimiter ; 

我得到這個錯誤:

#1064 - You have an error in your SQL syntax; check the manual that corresponds 
to your MySQL server version for the right syntax to use near 
'DECLARE mystringlength INT; SET mystringlength = LENGTH(mystring); 
DECLARE segm' at line 10 

我已經做了很多的玩弄在試圖制定出我要去哪裏錯了。我甚至已經剝離出來的循環共進行測試,但仍然得到同樣的錯誤。有誰知道我做錯了什麼地方聲明INT變量?這可能是一些令人難以置信的基本...!

非常感謝。

回答

6

有一些語法錯誤 -

其中之一是 - 所有聲明都必須在BEGIN ... END條款的開頭。存儲過程內

DELIMITER $ 

DROP FUNCTION IF EXISTS get_string_class$ 
CREATE FUNCTION get_string_class(mystring VARCHAR(15)) 

RETURNS VARCHAR(15) 
READS SQL DATA 
BEGIN 

DECLARE i INT; 
DECLARE segment VARCHAR(15); 
DECLARE String_Class VARCHAR(15); 
DECLARE mystringlength INT; 

SET i = 2; 
SET mystringlength = LENGTH(mystring); 
SET String_Class = NULL; 

WHILE i <= mystringlength DO 

    SET segment = LEFT(mystring, i); 

    SET String_Class = (SELECT String_Class FROM string_class_list WHERE String_Begins = segment); 

    IF (SELECT FOUND_ROWS()) = 1 THEN 
     RETURN String_Class; 
    END IF; 

    SET i = i + 1; 

END WHILE; 

RETURN String_Class; 

END$ 
DELIMITER ; 
+0

太棒了,非常感謝指針:) – 2012-08-01 10:53:48

4

DECLARE部分必須是在頂部和SET等statemnts之後開始。

+1

謝謝,每天都會學習一件新東西:) – 2012-08-01 10:55:09