Flyway - oracle PL / SQL程序迁移

时间:2012-08-09 09:02:51

标签: java oracle flyway

在没有代码重复的情况下更新schema_version表并在flyway中执行修改的PL / SQL包/过程的最佳方法是什么?

我的示例需要为每个PL / SQL代码模块创建一个类文件

public class V2_1__update_scripts extends AbstractMigration {
    // update package and procedures
}

AbstractMigration类执行 db / update 文件夹中的文件:

public abstract class AbstractMigration implements SpringJdbcMigration {
    private static final Logger log = LoggerFactory.getLogger(AbstractMigration.class);

    @Override
    public void migrate(JdbcTemplate jdbcTemplate) throws Exception {
        Resource packageFolder = new ClassPathResource("db/update");
        Collection<File> files = FileUtils.listFiles(packageFolder.getFile(), new String[]{"sql"}, true);
        for (File file : files ) {
            log.info("Executing [{}]", file.getAbsolutePath());
            String fileContents = FileUtils.readFileToString(file);
            jdbcTemplate.execute(fileContents);
        }
    }
}

有没有更好的方法来执行PL / SQL代码?

3 个答案:

答案 0 :(得分:1)

我想知道将代码复制到标准迁移文件夹中是否更好。看起来在给定的示例中,您将无法迁移到db的版本N,因为某些先前版本将执行pl / sql的所有当前版本。我有兴趣看看你是否为此找到了解决方案。

答案 1 :(得分:0)

没有您错过的内置支持或其他命令。

在我的头脑中,我会考虑你在这里呈现的方式,或者在SCM提交后使用生成器生成新的迁移sql文件。

让我们看看其他人是否找到了更好的解决方案。

答案 2 :(得分:0)

撰写本文时的Flyway版本(v4.2.0)支持专门为此类情况设计的可重复脚本的概念。基本上任何具有“创建或替换”语义的脚本都是候选者。

只需将脚本命名为R__mypackage_body.sql或您希望重复脚本的任何前缀。有关详细信息,请参阅Sql-based migrationsRepeatable migrations