Получение синтаксических ошибок при попытке скомпилировать функцию

Я пытаюсь скомпилировать следующую функцию, но получаю много синтаксических ошибок. Какие ошибки я совершаю? Я что-то упускаю? Можем ли мы указать длину символов в возвращаемом типе?

create function generate_invoice_number(id int) returns varchar(11)
    deterministic 
begin
    declare invoiceId varchar(11) default null;
    /**
         * Here id refers to the ID that is generated in the 
     * invoice table.
     */
    if id is not null and id > 0 
        then
            set invoiceId = concat('QUA-',lpad(id,7,'0'));
    end if;

    return invoiceId;
end;

Ошибки:

Код ошибки: 1064 У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '' в строке 4 (занято 0 мс)

Код ошибки: 1064 У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса, который следует использовать рядом с «если id не равен нулю и id > 0, тогда установите invoiceId = concat('QUA-',lpad(id,7,' в строке 5 (0 мс взято)

Код ошибки: 1064 У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «концом, если» в строке 1 (занято 0 мс)

Код ошибки: 1064 У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «return invoiceId» в строке 1 (занято 0 мс)

Код ошибки: 1064 У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «концом» в строке 1 (занято 0 мс)


person Community    schedule 02.08.2016    source источник
comment
Используете ли вы какой-либо клиент, такой как Workbench, или просто вводите создание функции в интерфейс терминального режима для MySQL?   -  person FDavidov    schedule 02.08.2016
comment
@ФДавидов SQLYog   -  person    schedule 02.08.2016
comment
Извините, не знаю такого. Единственное, что приходит мне на ум, это тот факт, что при использовании терминального режима вам нужно обернуть создание процедуры/функции оператором delimiter (хотя я не знаю, имеет ли это отношение к SQLYog). Извините, я не могу помочь вам больше, чем это.   -  person FDavidov    schedule 02.08.2016


Ответы (1)


Вы должны определить delimiter для этого:

delimiter $$

create function generate_invoice_number(id int) returns varchar(11)
    deterministic 
begin
    declare invoiceId varchar(11) default null;
    /**
         * Here id refers to the ID that is generated in the 
     * invoice table.
     */
    if id is not null and id > 0 
        then
            set invoiceId = concat('QUA-',lpad(id,7,'0'));
    end if;

    return invoiceId;
end$$

delimiter ;
person Blank    schedule 02.08.2016