MYSQL 函数失败 - 失败的 SQL: (1064)

问题描述 投票:0回答:1

这是我的 liquibase 变更日志:

<changeSet author="user" id="1712203200334-1">

<sqlFile path="config/liquibase/IsValidCoordinatesFormat.sql"/>

</changeSet>

sql 文件:

CREATE FUNCTION IsValidCoordinatesFormat(coordString VARCHAR(255)) RETURNS BOOLEAN
DETERMINISTIC
BEGIN
  DECLARE isValid BOOLEAN;
  DECLARE regex VARCHAR(255);
  SET isValid = FALSE;

  SET regex = '^(-?\\d+(\\.\\d+)?);(-?\\d+(\\.\\d+)?)$';

  IF coordString REGEXP regex THEN
    SET isValid = TRUE;
  END IF;

  RETURN isValid;
END;

这是我遇到的错误

Reason: liquibase.exception.DatabaseException: 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 12 [Failed SQL: (1064) CREATE FUNCTION IsValidCoordinatesFormat(coordString VARCHAR(255)) RETURNS BOOLEAN
2024-04-04 08:00:53 DETERMINISTIC
2024-04-04 08:00:53 BEGIN
2024-04-04 08:00:53   DECLARE isValid BOOLEAN;
2024-04-04 08:00:53   DECLARE regex VARCHAR(255);
2024-04-04 08:00:53   SET isValid = FALSE;
2024-04-04 08:00:53 
2024-04-04 08:00:53   SET regex = '^(-?\\d+(\\.\\d+)?);(-?\\d+(\\.\\d+)?)$';
2024-04-04 08:00:53 
2024-04-04 08:00:53   IF coordString REGEXP regex THEN
2024-04-04 08:00:53     SET isValid = TRUE;
2024-04-04 08:00:53   END IF]

SQL 语法对我来说看起来是正确的。是什么导致了这个问题?

sql mysql database liquibase
1个回答
0
投票

你的代码大部分都是多余的。使用单语句函数代码,不需要改变分隔符:

CREATE FUNCTION IsValidCoordinatesFormat(coordString VARCHAR(255)) 
RETURNS BOOLEAN
DETERMINISTIC
RETURN COALESCE(coordString REGEXP '^(-?\\d+(\\.\\d+)?);(-?\\d+(\\.\\d+)?)$', FALSE);

如果您保证

coordString
不会为 NULL,或者 NULL,因为在这种情况下函数输出对您来说是安全的,那么您可以删除 COALESCE()。

© www.soinside.com 2019 - 2024. All rights reserved.