sql – 在删除现有序列时创建现有用户时防止错误

前端之家收集整理的这篇文章主要介绍了sql – 在删除现有序列时创建现有用户时防止错误前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一堆sql脚本,可以创建/删除序列,用户和其他对象.我通过liquibase运行这些脚本,但它们失败了,因为当我尝试删除不存在的序列或创建现有用户时,oracle会抱怨.

有没有一种预防错误的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

猜你在找的MsSQL相关文章