2012-08-09 75 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