Oracle 如何在Liquibase中使用包
我们将liquibase与oracle一起使用。所以我们有一些包里面有程序。 在我们的例子中,changelog结构如下所示:Oracle 如何在Liquibase中使用包,oracle,view,package,liquibase,Oracle,View,Package,Liquibase,我们将liquibase与oracle一起使用。所以我们有一些包里面有程序。 在我们的例子中,changelog结构如下所示: master.xml | | release1 | | | release-maser.xml | release2 | | | release-maser.xml | softObjects | | | package-master.xml | packages | | | somePackage.pkb |
master.xml
|
| release1
| |
| release-maser.xml
| release2
| |
| release-maser.xml
| softObjects
| |
| package-master.xml
| packages
| |
| somePackage.pkb
| somePackage.pks
使用runOnChange=false的“releases”和使用runOnChange=true的“softObjects”(可以创建或替换)中的更改集,如最佳实践中的:
尝试为存储过程维护单独的变更日志并使用
runOnChange=“true”。此标志强制LiquiBase检查
变更集已修改。如果是这样,liquibase将再次执行更改
因此,每次更新都会从“发布”中插入一些“增量”更改集,并在重新安装所有已更改的“软对象”之后,在通常情况下,一切都正常
但是如果我需要设置新的DB,我会遇到一个问题:
在第二个版本的变更集中,我使用了somePackage(v1),但在下一个版本中,我需要更改logic/API somePackage,这样我将得到一些无法在以前创建的变更集中使用的包(v2)。所以现在我有一个变更集,在更新时会尝试使用错误的包版本
为了避免这种情况,我可以直接在release文件夹中添加软对象,而不必在创建时runOnChange=true。当我需要更改它时,我应该将文件的早期版本复制到我的新版本中,并在副本中进行更改
这种方法有一些缺点:
- 您制作了大量的复制文件,这些文件可以由数千行 代码(是的,我知道它不好)
- 版本控制系统将其识别为新文件(对于 (审稿人)