【问题标题】:Syntax error when creating a MySQL function创建 MySQL 函数时出现语法错误
【发布时间】:2020-01-12 10:24:14
【问题描述】:

我正在尝试在 MySQL 中创建一个函数,但遇到语法错误。这是我的功能:

DELIMITER $$
CREATE FUNCTION gg () 
RETURNS char(8)
DETERMINISTIC
BEGIN 
  DECLARE cod varchar(8);
  select RIGHT(MAX(idCurso),7) into cod from Curso;
  IF cod is null then
        set cod = 'C' + right('0000000' + convert(varchar(7),1),7);
    else
        set cod = 'C' + right('0000000' + convert(varchar(7), @id +1),7)
    return cod;
END$$
DELIMITER ;

我在if cod is null then 之后的set cod 中收到此错误:

“cod”在这个位置无效,需要一个标识符

我做错了什么?

【问题讨论】:

  • 分享错误
  • @Mario,你能解释一下你想用这条线实现什么set cod = 'C' + right('0000000' + convert(varchar(7),1),7);
  • 上次我检查过,MySQL 不使用+ 进行连接;但自从我检查以来已经有一段时间了。此外,看起来CONVERT 的参数可能是倒退的......而且你没有END IF 确保你使用的是 MySQL 文档,而不是 MSSQL、Oracle 或 sqlite 等。我>
  • + 是 mysql 中的算术运算符,请改用 concat。您没有终止第二个 set 语句,并且您的第一个 set 语句没有意义。
  • @JitendraYadav 我正在尝试使用以下结构创建一个 id:'C000000X' 是 'x' 一个连续的数字。

标签: mysql function


【解决方案1】:

你的函数有很多问题。

  • + 图标在 MySQL 中不执行连接,它用于求和。同样使用CONCATCONCAT_WS
  • CONVERT 使用不当。请参阅文档CONVERT
  • 使用LPAD0 填充到整数值的左侧,使其长度为7
  • 已删除@a,不知道从哪里访问它,将其替换为cod 值并将其加1。
  • 错过了END IF 子句。
DELIMITER $$
CREATE FUNCTION gg () RETURNS CHAR(8) DETERMINISTIC 
BEGIN 
    DECLARE cod VARCHAR(8);
    SELECT
        RIGHT(MAX(idCurso),7) INTO cod
    FROM Curso; 

    IF cod IS NULL THEN 
        SET cod = CONCAT('C', LPAD(1, 7, '0')); 
    ELSE 
        SET cod = CONCAT('C', LPAD(cod + 1, 7, '0')); 
    END IF; 
    RETURN cod; 
END$$
DELIMITER ;

【讨论】:

  • @MarioVasquez,很乐意提供帮助。对于任何 MySQL 语句,检查它是否正确以及如何使用它。这是最好的学习方式。
猜你喜欢
  • 2023-03-09
  • 2019-10-22
  • 1970-01-01
  • 2018-06-14
  • 2014-04-29
  • 2013-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多