尝试编译函数时出现语法错误
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 的终端模式接口中? @FDavidovSQLYog
对不起,不知道那个。我想到的唯一一件事是,在使用终端模式时,您需要使用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 语句时出现语法错误?