MySQL проблема с использованием CREATE FUNCTION в cPanel - PullRequest
1 голос
/ 10 мая 2011

Я всегда получаю сообщение об ошибке при создании функции mysql в cpanel с кодом ниже. Но приведенный ниже код работает правильно при создании функции mysql в SQL Manger 2007. Кто-нибудь сказать мне, что не так с этим кодом для 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 голосов
/ 10 мая 2011

Для многострочных операторов нельзя использовать один и тот же символ (по умолчанию «;») для разделения отдельных операторов в определении функции и всего оператора CREATE. Если вы попытаетесь, оператор создания заканчивается на первом «;» (в примере кода это после первого DECLARE). Поскольку синтаксическая ошибка оператора находится в конце усеченного оператора, в сообщении об ошибке указывается '' как часть оператора, где произошла ошибка.

В клиенте командной строки вы можете использовать команду delimiter, чтобы изменить используемый клиентом разделитель (например, ";;", а затем завершить оператор создания следующим разделителем:

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

В phpMyAdmin есть поле «разделитель», которое выполняет ту же цель.

...