我有一堆创建/删除序列,用户和其他对象的sql脚本。我正在通过liquibase运行这些脚本,但是它们失败了,因为当我尝试删除不存在的序列或创建现有用户时,oracle会抱怨。
有一种防止错误发生的预言方式吗?
某种东西
创建用户/序列(如果不存在) 删除用户/安全性(如果存在)
创建用户/序列(如果不存在)
删除用户/安全性(如果存在)
据我所知,我有以下选择:
任何想法/想法将不胜感激。
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。