我有一堆sql脚本,可以创建/删除序列,用户和其他对象.我通过liquibase运行这些脚本,但它们失败了,因为当我尝试删除不存在的序列或创建现有用户时,oracle会抱怨.
某种东西
Create User / Sequence if not exists
Drop User/ Secuence if exists
据我所知,我有以下选择:
>编写一个plsql脚本
>使用liquibase上下文.
>使用liquibase前提条件,但这意味着太多的工作.
任何想法/想法将不胜感激.
解决方法
Liquibase具有failOnError属性,您可以在包含可能失败的调用的changeSets上将其设置为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