检查唯一约束是否存在并使用 liquibase 删除它

Lor*_*ren 6 sql oracle liquibase

我有一个变更集,其中我最初检查唯一约束是否存在,然后如果存在,它将删除约束。

<changeSet author="loren"
               id="DROP_UNIQUE_CONSTRAINT_RULEPRIORITY_ORACLE_v1" dbms="oracle">
        <preConditions onFail="MARK_RAN">
            <sqlCheck expectedResult="1">
                SELECT COUNT(*)
                FROM USER_CONSTRAINTS
                WHERE CONSTRAINT_NAME='UC_RULES_PRIORITY'
            </sqlCheck>
        </preConditions>
        <dropUniqueConstraint constraintName="UC_RULES_PRIORITY"
                              schemaName="${main.schema}"
                              tableName="RULES"/>

</changeSet>
Run Code Online (Sandbox Code Playgroud)

问题是它似乎没有通过先决条件。它总是说 MARK_RAN 意味着没有找到约束。反过来,约束永远不会被删除。

我尝试在我的数据库中执行 SELECT 语句,它返回 1。

这是正确的方法还是有替代解决方案?

ser*_*inc 0

总结一下评论:

<changeSet author="loren"
               id="DROP_UNIQUE_CONSTRAINT_RULEPRIORITY_ORACLE_v1" dbms="oracle">
        <preConditions onFail="MARK_RAN">
            <sqlCheck expectedResult="1">
                SELECT COUNT(*)
                FROM all_constraints
                WHERE CONSTRAINT_NAME='UC_RULES_PRIORITY'
                AND OWNER='${main.schema}'
            </sqlCheck>
        </preConditions>
        <dropUniqueConstraint constraintName="UC_RULES_PRIORITY"
                              schemaName="${main.schema}"
                              tableName="RULES"/>

</changeSet>
Run Code Online (Sandbox Code Playgroud)

@Loren:请调整和/或发布您自己的答案。