提问人:Loren 提问时间:10/26/2016 更新时间:8/10/2023 访问量:10944
检查唯一约束是否存在,并使用 liquibase 将其删除
Check if the unique constraint exists and drop it using 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>
这样做的问题是它似乎没有通过先决条件。它总是说MARK_RAN意味着没有找到约束。反过来,约束永远不会被丢弃。
我尝试在我的数据库中执行 SELECT 语句,它返回 1。
这是正确的方法还是有替代解决方案?
答:
0赞
serv-inc
7/10/2023
#1
总结一下评论:
<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>
@Loren:请调整和/或发布您自己的答案。
评论
${main.schema}
all_constraints
user_constraints
all_constraints
${main.schema}
${main.schema}
user_constraints
all_constraitns
owner
where
all_constraints
${main.schema}