使用Oracle编译的Flyway回调

使用Oracle编译的Flyway回调,oracle,compilation,flyway,Oracle,Compilation,Flyway,我尝试将迁移前和迁移后脚本作为回调添加到flyway,以编译我的视图、过程、函数等。 是否有可能在迁移过程之前停止它,或者在脚本失败之前或之后进行回滚(或者返回警告) 因为我现在看到的唯一一件事就是我收到了这样的警告 [警告]DB:警告:执行已完成,但有警告(SQL状态:99999-错误代码:17110) 它不停地继续着。 我考虑了FlywayCallback接口及其实现,但我不完全确定编译时应该如何完成 我正在用最新的Flyway使用Spring Boot 1.2.5。我也有同样的错误SQL状

我尝试将迁移前和迁移后脚本作为回调添加到flyway,以编译我的视图、过程、函数等。 是否有可能在迁移过程之前停止它,或者在脚本失败之前或之后进行回滚(或者返回警告)

因为我现在看到的唯一一件事就是我收到了这样的警告

[警告]DB:警告:执行已完成,但有警告(SQL状态:99999-错误代码:17110)

它不停地继续着。 我考虑了FlywayCallback接口及其实现,但我不完全确定编译时应该如何完成


我正在用最新的Flyway使用Spring Boot 1.2.5。

我也有同样的错误<代码>SQL状态:99999-错误代码:17110。我找到了这个解决办法。 检查此警告下的哪个版本以及sql脚本检查下的哪个版本具有触发器或任何未正确关闭的过程

如果触发器结束,关闭触发器或任何过程

例:


Flyway 5.0现在提供了一个名为错误处理程序的功能,可以让您完全做到这一点。现在,您可以创建一个错误处理程序,将警告转换为错误

import org.flywaydb.core.api.FlywayException;
import org.flywaydb.core.api.errorhandler.Context;
import org.flywaydb.core.api.errorhandler.ErrorHandler;
import org.flywaydb.core.api.errorhandler.Warning;

public class OracleProcedureFailFastErrorHandler implements ErrorHandler {
    @Override
    public boolean handle(Context context) {
        for (Warning warning : context.getWarnings()) {
            if ("99999".equals(warning.getState()) && warning.getCode() == 17110) {
                throw new FlywayException("Compilation failed");
            }
        }
        return false;
    }
}

文档中的更多信息:

当我的脚本有一个“CREATETABLE XXX AS SELECT…”语句时,我也有同样的错误

我通过将其拆分为两个单独的语句来修复它:

CREATE TABLE XXX (columns def...);

INSERT INTO TABLE XXX (columns...)
SELECT...;
CREATE TABLE XXX (columns def...);

INSERT INTO TABLE XXX (columns...)
SELECT...;