Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MariaDB和flyway语法错误,但不在JAVA中_Java_Mysql_Mariadb_Command Line Interface_Flyway - Fatal编程技术网

MariaDB和flyway语法错误,但不在JAVA中

MariaDB和flyway语法错误,但不在JAVA中,java,mysql,mariadb,command-line-interface,flyway,Java,Mysql,Mariadb,Command Line Interface,Flyway,我正在尝试执行迁移SQL脚本。 我使用Flyway来运行脚本。但是,有些脚本失败了 失败的脚本: 我真的无法向自己解释为什么会发生这种情况。事实证明,问题在于不使用分隔符。 为了使语句能够成功解析,分隔符应按如下方式使用: DELIMITER // CREATE TRIGGER my_cool_trigger BEFORE UPDATE ON my_db FOR EACH ROW BEGIN DECLARE n INT; SET n = (SELECT COUNT(uuid) F

我正在尝试执行迁移SQL脚本。 我使用Flyway来运行脚本。但是,有些脚本失败了

失败的脚本:


我真的无法向自己解释为什么会发生这种情况。

事实证明,问题在于不使用分隔符。 为了使语句能够成功解析,分隔符应按如下方式使用:

DELIMITER //
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//
DELIMITER ;

它在Java中工作的原因是Java prepareStatement似乎添加了自定义分隔符或其他东西…

您所说的*通过Java*执行相同的脚本是什么意思?Flyway也是Java。它们是作为预备语句运行的。它们是什么?准备好的语句的具体内容是什么?它们=脚本中包含的语句。显示您的Java代码。
connection.prepareStatement(sql).execute();
DELIMITER //
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//
DELIMITER ;