programing

고유한 구속조건이 존재하는지 확인하고 액상을 사용하여 떨어트립니다.

bestprogram 2023. 9. 19. 21:18

고유한 구속조건이 존재하는지 확인하고 액상을 사용하여 떨어트립니다.

처음에 고유한 제약 조건이 존재하는지 확인한 후 존재한다면 제약 조건을 삭제하는 변경 세트가 있습니다.

<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이라고 표시됩니다.그러면 제약 조건이 절대로 떨어지지 않습니다.

제 db에서 SELECT 문 실행을 시도했는데 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: 조정하거나 자신의 답변을 올려주세요.

언급URL : https://stackoverflow.com/questions/40256416/check-if-the-unique-constraint-exists-and-drop-it-using-liquibase