【问题标题】:Flyway - oracle PL/SQL procedures migrationFlyway - oracle PL/SQL 过程迁移
【发布时间】:2012-08-06 11:24:30
【问题描述】:

在不重复代码的情况下更新 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 代码?

【问题讨论】:

    标签: java oracle flyway


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      在我的脑海中,我会考虑您在此处介绍的方式或使用生成器在 SCM 提交后生成新的迁移 sql 文件。

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

      【讨论】:

        【解决方案3】:

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

        只需将您的脚本命名为R__mypackage_body.sql 或您希望可重复脚本的任何前缀。请参阅Sql-based migrationsRepeatable migrations 了解更多信息。

        【讨论】:

          猜你喜欢
          • 2012-07-27
          • 1970-01-01
          • 1970-01-01
          • 2013-03-27
          • 1970-01-01
          • 2015-08-18
          • 1970-01-01
          • 2015-01-02
          • 2019-12-27
          相关资源
          最近更新 更多