IT TIP

기존 검사 제약을 수정하는 방법은 무엇입니까?

itqueen 2020. 11. 20. 17:32
반응형

기존 검사 제약을 수정하는 방법은 무엇입니까?


테이블을 삭제하고 다시 만드는 것 외에 테이블에 대한 기존 검사 제약 조건을 수정할 수있는 방법 있습니까?

create table t ( n number);
ora10g> Tabelle wurde erstellt.

ora10g> alter table t add constraint ck check(n>0);

Tabelle wurde geõndert.

ora10g> alter table t modify constraint ck check(n<0);
alter table t modify constraint ck check(n<0)
                                   *
FEHLER in Zeile 1:
ORA-00933: SQL-Befehl wurde nicht korrekt beendet

삭제하고 다시 만들어야하지만 원하지 않는 경우 데이터를 다시 확인하는 데 드는 비용이 발생하지 않아도됩니다.

alter table t drop constraint ck ;
alter table t add constraint ck check (n < 0) enable novalidate;

enable novalidate절은 제약 조건이 적용되도록 삽입 또는 업데이트를 강제하지만 모든 행이 준수하는지 확인하기 위해 테이블에 대한 전체 테이블 스캔을 강제하지 않습니다.


먼저 새 제약 조건을 만든 다음 이전 제약 조건을 삭제하십시오.
이렇게하면 다음을 보장 할 수 있습니다.

  • 제약은 항상 제자리에 있습니다.
  • 기존 행은 새로운 제약 조건을 위반하지 않습니다.
  • 제약 조건을 삭제 한 후 새로운 제약 조건이 적용되기 전에 잘못된 INSERT / UPDATE가 시도되지 않습니다.

아니요, 다른 방법으로 할 수 없습니다.


아니요. 그러한 기능이있는 경우이 구문 그림에 나열됩니다 . (문서화되지 않은 SQL 기능이 있거나 내가 알지 못하는 패키지가있을 수도 있습니다.)

참고 URL : https://stackoverflow.com/questions/5077658/how-to-modify-an-existing-check-constraint

반응형