尝试编译函数时出现语法错误

Posted

技术标签:

【中文标题】尝试编译函数时出现语法错误【英文标题】:Getting syntax errors while trying to compile a functiom 【发布时间】:2016-08-02 05:03:56 【问题描述】:

我正在尝试编译以下函数,但出现大量语法错误。我犯了什么错误?我错过了什么吗?能否给出返回类型中的字符长度?

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 服务器版本相对应的手册 在 'if id 不为 null 且 id > 0 then 附近使用的语法 在第 5 行设置 invoiceId = concat('QUA-',lpad(id,7,' 0 ms)

错误代码:1064 您的 SQL 语法有错误;检查 与您的 MySQL 服务器版本相对应的手册 在第 1 行的 'end if' 附近使用的语法(0 ms)

错误代码:1064 您的 SQL 语法有错误;检查 与您的 MySQL 服务器版本相对应的手册 在第 1 行的“return invoiceId”附近使用的语法(0 ms)

错误代码:1064 您的 SQL 语法有错误;检查 与您的 MySQL 服务器版本相对应的手册 在第 1 行的“结束”附近使用的语法(占用 0 毫秒)

【问题讨论】:

您是在使用任何客户端,例如 Workbench,还是只是将函数创建输入到 MySQL 的终端模式接口中? @FDavidov SQLYog 对不起,不知道那个。我想到的唯一一件事是,在使用终端模式时,您需要使用delimiter 语句来包装过程/函数创建(虽然我不知道这是否与 SQLYog 有关)。对不起,我不能帮你更多。 【参考方案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 ;

【讨论】:

以上是关于尝试编译函数时出现语法错误的主要内容,如果未能解决你的问题,请参考以下文章

将成员函数传递给模板函数时出现语法错误

尝试使用 if 语句创建函数时出现 Postgresql 语法错误

通过 std::thread 将参数传递给函数时出现语法错误

为啥在我的 Postgres 函数中使用 IF 语句时出现语法错误?

Django - 在 javascript 函数中使用 和 % % 标签时出现语法错误

为 elixir 项目编译牛仔时出现语法错误