【发布时间】:2020-04-24 00:41:32
【问题描述】:
我正在尝试执行(迁移)SQL 脚本(MariaDB 风格)。 我正在使用 Flyway 来运行脚本。但是,有些脚本会失败...
失败的脚本:
CREATE TRIGGER my_cool_trigger
BEFORE UPDATE ON my_db
FOR EACH ROW
BEGIN
DECLARE n INT;
SET n = (SELECT COUNT(uuid) FROM my_db WHERE uuid != NEW.uuid AND a_uuid = NEW.a_uuid AND number = NEW.number AND event_id IS NULL AND t_begin < NEW.t_end AND t_end > NEW.t_begin);
IF n > 0 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='Oof. ERROR!!!';
END IF;
END;
错误信息:
迁移cool_script.sql 失败 -------------------------------------------------- ---- SQL 状态:42000 错误代码:1064 消息:(conn=2661) 你有一个错误 你的 SQL 语法;检查与您的 MariaDB 对应的手册 在第 6 行的 '' 附近使用正确语法的服务器版本
当我尝试通过 Java 执行相同的脚本(它们作为准备好的语句运行,通过 JDBC 发送到 MariaDB)时,一切都按计划进行,没有任何错误。
Java:
connection.prepareStatement(sql).execute();
我真的无法向自己解释为什么会发生这种情况。
【问题讨论】:
-
*通过 Java *执行相同的脚本是什么意思? Flyway 也是 Java。
-
它们作为准备好的语句运行
-
什么“他们”?准备好的语句的具体内容是什么?
-
它们 = 脚本中包含的语句。
-
显示您的 Java 代码。
标签: java mysql mariadb command-line-interface flyway