Каков правильный синтаксис для команды set в пользовательской функции mySQL? - PullRequest
1 голос
/ 05 апреля 2011

Я получаю следующую ошибку при попытке создать функцию в MySQL 5.1:

Error Code : 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 '' at line 25 (0 ms taken)

Вот мой код:

DELIMITER $$  

CREATE
    FUNCTION removeMethodAndBackslash(input VARCHAR(40))
    RETURNS VARCHAR(20)
    BEGIN

    DECLARE loginName VARCHAR(40);
    SET loginName = input;

    IF SUBSTRING(loginName,7) LIKE '\b%' THEN
        SET loginName = 'b' + SUBSTRING(input,8);

    ELSE IF SUBSTRING(loginName,7) LIKE '\n%' THEN
        SET loginName = 'n' + SUBSTRING(input,8);

    ELSE IF SUBSTRING(loginName,7) LIKE '\t%' THEN
        SET loginName = 't' + SUBSTRING(input,8);

    ELSE IF SUBSTRING(loginName,7) LIKE '\r%' THEN
        SET loginName = 'r' + SUBSTRING(input,8);

    ELSE
        SET loginName = SUBSTRING(input,7);

    RETURN loginName;

END $$

DELIMITER ;

Я играл с синтаксисом некоторое время, и я уверен, что это очень маленькая деталь, которую я пропускаю. Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 05 апреля 2011

Попробуйте это -

DELIMITER $$  

CREATE
    FUNCTION removeMethodAndBackslash(input VARCHAR(40))
    RETURNS VARCHAR(20)
    BEGIN

    DECLARE loginName VARCHAR(40);
    SET loginName = input;

    IF SUBSTRING(loginName,7) LIKE '\b%' THEN
        SET loginName = 'b' + SUBSTRING(input,8);

    ELSEIF SUBSTRING(loginName,7) LIKE '\n%' THEN
        SET loginName = 'n' + SUBSTRING(input,8);

    ELSEIF SUBSTRING(loginName,7) LIKE '\t%' THEN
        SET loginName = 't' + SUBSTRING(input,8);

    ELSEIF SUBSTRING(loginName,7) LIKE '\r%' THEN
        SET loginName = 'r' + SUBSTRING(input,8);

    ELSE
        SET loginName = SUBSTRING(input,7);
    END IF;

    RETURN loginName;

END $$

DELIMITER ;
1 голос
/ 05 апреля 2011

вы можете использовать CASE...THEN...ELSE блок

DELIMITER $$  

CREATE FUNCTION removeMethodAndBackslash(input VARCHAR(40))
RETURNS VARCHAR(20)
    BEGIN

    DECLARE loginName VARCHAR(40);

    SET loginName = 
       CASE WHEN SUBSTRING(input,7) LIKE '\b%' THEN 'b' + SUBSTRING(input,8)
            WHEN SUBSTRING(input,7) LIKE '\n%' THEN 'n' + SUBSTRING(input,8)
            WHEN SUBSTRING(input,7) LIKE '\t%' THEN 't' + SUBSTRING(input,8)
            WHEN SUBSTRING(input,7) LIKE '\r%' THEN 'r' + SUBSTRING(input,8)
            ELSE SUBSTRING(input,7)
       END;

    RETURN loginName;

END $$
...