在cPanel中使用CREATE FUNCTION的MySQL问题

时间:2011-05-10 07:01:03

标签: mysql cpanel

我在使用以下代码在cpanel中创建mysql函数时一直收到错误。 但是在SQL Manger 2007中创建mysql函数时,下面的代码正常运行。 任何人都告诉我这个cpanel代码有什么问题。

错误: - 您的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;

非常感谢。

1 个答案:

答案 0 :(得分:0)

对于多行语句,您不能使用相同的字符(默认情况下为“;”)来分隔函数定义和整个CREATE语句中的各个语句。如果您尝试,创建语句将在第一个“;”结束(在示例代码中,它位于第一个DECLARE之后)。由于语句语法错误位于截断语句的末尾,因此错误消息将''作为发生错误的语句的一部分。

从命令行客户端,您可以使用delimiter命令将客户端使用的分隔符更改为(例如)“;;”,然后使用此分隔符结束创建语句:

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

在phpMyAdmin中,有一个“分隔符”字段可以实现相同的目的。