2011-05-10 30 views
1

我一直在使用下面的代碼在cpanel中創建mysql函數時總是收到錯誤。 但是,在SQL Manger 2007中創建mysql函數時,下面的代碼運行正常。 任何人都可以告訴我這個代碼對於cpanel有什麼問題。在cPanel中使用CREATE FUNCTION的MySQL問題

錯誤: - 您的SQL語法錯誤;檢查對應於你的MySQL服務器版本正確的語法使用近'出現在第12行 (0.81秒)

CREATE FUNCTION F_test (topsbwynum INTEGER) 
    RETURNS float(20,2) 
    NOT DETERMINISTIC 
    CONTAINS SQL 
    SQL SECURITY DEFINER 

BEGIN 
    DECLARE FinalPrice VARCHAR(20); 
    DECLARE err VARCHAR(20); 
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET err = 1; 

    IF(sbwynum > 0)THEN 
     IF(FinalPrice > 0)THEN 
      RETURN FinalPrice; 
     ELSEIF(adjprice > 0)THEN 
      RETURN adjprice; 
     ELSEIF(price > 0)THEN 
      RETURN price; 
     ELSEIF(estprice > 0)THEN 
      RETURN estprice; 
     ELSE 
      RETURN 0; 
     END IF; 
    ELSE 
     RETURN 0; 
    END IF; 
END; 

感謝很多的手冊。

+0

你能給出錯誤嗎?你可以嘗試一下;函數聲明後,但我認爲它不是它。 – Elorfin 2011-05-10 07:24:51

回答

0

對於多行語句,不能使用相同的字符(缺省爲「;」)來分隔函數定義中的單個語句和整個CREATE語句。如果您嘗試,創建聲明將在第一個「;」結束(在示例代碼中,它在第一個DECLARE之後)。由於語句語法錯誤位於截斷語句的末尾,因此錯誤消息將「'作爲發生錯誤的語句的一部分。

在命令行客戶端,你應該使用delimiter命令更改客戶端使用的分隔符(如)「;;」,然後結束創建語句與此分隔符:

delimiter ;; 
CREATE FUNCTION F_test (topsbwynum INTEGER) 
    ... 
END;; 
delimiter ; 

在phpMyAdmin中,有一個符合相同目的的「分隔符」字段。

+0

非常感謝 – Bajrang 2011-05-10 10:57:26