만들기 NOT NULL 제약 조건 및 CHECK :
create table tmp(
n1 number not null,
n2 number check (n2 is not null)
)
/
select * from all_constraints where table_name = 'TMP'
/
출력 (빼기) :
constraint_name constraint_type table_name search_condition
--------------- --------------- ---------- ----------------
SYS_C0036560 C TMP "N1" IS NOT NULL
SYS_C0036561 C TMP n2 is not null
그래서, 그들은 거의 사전에 동일 보인다.
필자는 테이블/열 조합으로 제약 조건 이름을 찾은 다음 (동적 SQL을 사용하여) 삭제/비활성화하는 스크립트가 필요하다고 생각합니다.
더 많은 의견 :) 차이가 있습니다! 테이블에 대한 쿼리 결과를 확인할 수 있습니까?
select column_name, NULLABLE from USER_TAB_COLS where table_name = 'TMP'
COLUMN_NAME NULLABLE
------------------------------ --------
N1 N
N2 Y
내가
alter table tmp drop constraint SYS_C0036560
N1 열이 Null을 허용 할 후 :
COLUMN_NAME NULLABLE
------------------------------ --------
N1 Y
N2 Y
이뿐만 아니라 당신을 위해 작동하는 경우, 다음 스크립트
select 'alter table ' || table_name || ' drop constraint ' || constraint_name || ';'
from all_constraints where table_name in ('TMP', 'list of your tables')
and constraint_type = 'C'
and instr(upper(search_condition, 'IS NOT NULL') > 0
and replace(
substr(upper(search_condition), 1, instr(search_condition, ' ')),
'"', '') in ('FIRST_NAME', 'maybe some other columns names')
출처
2014-06-11 12:38:09
vav
는'alter'가 실행될 때 제대로 작동합니까 내 경우가 아니거나 오류가 무엇입니까? 따옴표가 붙지 않는 한 테이블 이름은 실제로 'USER'일 수는 없지만 문제인 경우 ORA-00932를 받게됩니다. –
테이블 이름이 바뀌 었습니다. 실제로는 USER로 이름이 지정되지 않았습니다. 이 변경은 오류없이 끝나고 열 정의에서 NOT NULL을 제거하지만 CHECK (NOT NULL)을 제거하지 않음 – kuchi
변경 전에 두 개의 명백하게 동일한 (SYS_C 이름과 다른) 제약 조건이 있는지 알고 있습니까? vav가 보여 주었 듯이, 당신이 명시 적으로'is not null' 제약 조건을 만들었고 컬럼을 not-null로 설정하면 그 상태에있을 수 있습니다. 수입이나 재건 후에 실수로 일어난 일을 기억하지만, 어떤 도구에 문제가 있었는지 정확히 기억할 수는 없습니다. 나는 dbms_metadata가 때때로 그렇게 할 것이라고 생각한다. 다른 환경에는 두 가지 제약 조건이 있습니까? 어쩌면 그게 실제로 문제가 아니겠습니까? –