2013-08-23 3 views
14

몇 가지 null 값이 포함 된 열이있는 테이블이 있습니다. 기존 null을 Null이 아닌 값으로 업데이트하지 않고 해당 열에 NOT NULL 제약 조건을 추가하고 싶습니다. 기존의 null 값을 유지하고이 열에 null이 아닌 값이 들어있는 이후 행을 확인하려고합니다. 이것이 가능한가? 방법?null 값을 포함하는 열에 not null 제약 조건을 추가하는 방법

+4

자신의 제약 조건을 위반하는 조금 미친 것 같다

바꿔 테이블 THR_EM_DESIGNATION_ID을 수정 thr_empl_info : 나는 문제를 직면하고 다음과 같이 해결한다. 그것이 아니면 null이 될 수 없습니다. 일반적으로 유연성은 데이터베이스 자체가 아닌 데이터베이스에 공급되는 응용 프로그램에서 설정됩니다. 네가하고 싶은 일을하는 것은 그 방법이다. :) – railsdog

+0

새로운 null을 거부하는 삽입/업데이트 트리거가있을 수 있습니다. 그러나 전반적으로 이것은 나쁜 생각처럼 들립니다. – Thilo

+0

전혀 미치지 않습니다. 필자는 기존 (이전) 데이터를 유지하려고하지만 새로운 (또는 업데이트 된) 데이터에 대한 제약 조건을 확인하기 시작하려는 시스템에서이 기능을 사용했습니다. –

답변

35

유효성이 확인되지 않은 제약 조건을 추가 할 수 있습니다. 기존의 행은 보지 않지만 새로운 행이나 업데이트 된 행이 있는지 검사됩니다.

ALTER TABLE mytable MODIFY mycolumn NOT NULL NOVALIDATE; 

제약 조건을 충족시키지 않으면 기존 행을 업데이트 할 수 없습니다.

또한 최적화 프로그램이 계획을 작성하는 데이 제약 조건을 사용할 수 없다는 단점을 인식하십시오. 일부 행에는 여전히 null이있을 수 있다고 가정해야합니다.

+0

추가 참조를 위해 외부 링크를 제공해주십시오. 감사! – Rachcha

+1

구체적으로 무엇입니까? 문서 : http://docs.oracle.com/cd/E11882_01/server.112/e41084/clauses002.htm#i1002273 –

-1

ALTER TABLE table_name SET column_name = '0' WHERE column_name IS NULL;

ALTER TABLE table_name MODIFY COLUMN (column_name NUMBER CONSTRAINT constraint_identifier NOT NULL);

이것은 물론 여러분의 열이 숫자라고 가정하고 있지만 실제로는 똑같습니다. '0'을 null이 아닌 기본값으로 변경하면됩니다.

관련 문제