小编典典

删除不存在的序列并创建现有用户时防止错误

sql

我有一堆创建/删除序列,用户和其他对象的sql脚本。我正在通过liquibase运行这些脚本,但是它们失败了,因为当我尝试删除不存在的序列或创建现有用户时,oracle会抱怨。

有一种防止错误发生的预言方式吗?

某种东西

创建用户/序列(如果不存在)

删除用户/安全性(如果存在)

据我所知,我有以下选择:

  • 编写一个plsql脚本
  • 使用liquibase上下文。
  • 使用liquibase前提条件,但这将意味着过多的工作。

任何想法/想法将不胜感激。


阅读 173

收藏
2021-03-10

共1个答案

小编典典

Liquibase具有failOnError属性,您可以在包含可能失败的调用的changeSet上将其设置为false。

<changeSet failOnError="false">
   <createSequence sequenceName="new_sequence"/>
</changeSet>

这使您可以拥有简单的创建用户,创建序列,删除用户和删除序列changeSet,并且如果该语句因用户/序列存在/不存在而引发错误,它们仍将被标记为已运行,并且更新将继续。

这种方法的缺点是,如果它们由于其他原因(错误的权限,连接失败,无效的SQL等)而出错,也会将它们标记为已运行并继续运行。更准确的方法是使用前提条件,例如:

<changeSet>
   <preconditions onFail="MARK_RAN"><not><sequenceExists/></not></preconditions>
   <createSequence name="new_sequence"/>
</changeSet>

当前没有userExists前提条件,但是您可以创建自定义前提条件或退回到该前提条件。有关文档,请参见http://www.liquibase.org/documentation/preconditions.html

2021-03-10