这是我的 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 语法对我来说看起来是正确的。是什么导致了这个问题?
你的代码大部分都是多余的。使用单语句函数代码,不需要改变分隔符:
CREATE FUNCTION IsValidCoordinatesFormat(coordString VARCHAR(255))
RETURNS BOOLEAN
DETERMINISTIC
RETURN COALESCE(coordString REGEXP '^(-?\\d+(\\.\\d+)?);(-?\\d+(\\.\\d+)?)$', FALSE);
如果您保证
coordString
不会为 NULL,或者 NULL,因为在这种情况下函数输出对您来说是安全的,那么您可以删除 COALESCE()。