2012-08-09 76 views
1

更新schema_version表并在flyway中执行修改后的PL/SQL程序包/过程而没有代码重复的最佳方式是什么?Flyway - Oracle PL/SQL程序迁移

我的例子就需要一个类文件对每个PL/SQL代码modicaition

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

AbstractMigration类DB /更新执行文件文件夹中创建:

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代码的更好方法?

回答

0

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

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

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

1

我不知道是否最好将代码复制到标准的迁移文件夹。对于给定的例子,您似乎无法将其迁移到数据库的版本N,因为某些以前的版本会执行所有当前版本的pl/sql。我很想看看你是否为此解决了一个解决方案。

0

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

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