加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 06:54:31 所属栏目:MsSql教程 来源:网络整理
导读:我有一堆sql脚本,可以创建/删除序列,用户和其他对象.我通过liquibase运行这些脚本,但它们失败了,因为当我尝试删除不存在的序列或创建现有用户时,oracle会抱怨. 有没有一种预防错误的oracle方法? 某种东西 Create User / Sequence if not exists Drop User/ S
我有一堆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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读