Oracle 如何在Liquibase中使用包

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 |

我们将liquibase与oracle一起使用。所以我们有一些包里面有程序。 在我们的例子中,changelog结构如下所示:

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。当我需要更改它时,我应该将文件的早期版本复制到我的新版本中,并在副本中进行更改

这种方法有一些缺点:

  • 您制作了大量的复制文件,这些文件可以由数千行 代码(是的,我知道它不好)
  • 版本控制系统将其识别为新文件(对于 (审稿人)
我错了什么?如果“softObjects”可能会更改,我应该如何使用它