Development Tip

제약의 이름을 모르는 경우 Oracle에서 "not null"제약 조건을 어떻게 삭제할 수 있습니까?

yourdevel 2020. 10. 11. 11:27
반응형

제약의 이름을 모르는 경우 Oracle에서 "not null"제약 조건을 어떻게 삭제할 수 있습니까?


필드에 NOT NULL 제약 조건이있는 데이터베이스가 있으며이 제약 조건을 제거하고 싶습니다. 복잡한 요인은이 제약 조건에 시스템 정의 이름이 있고 제약 조건의 이름이 프로덕션 서버, 통합 서버 및 다양한 개발자 데이터베이스간에 다르다는 것입니다. 우리의 현재 프로세스는 변경 스크립트를 체크인하는 것이며 자동화 된 작업은 대상 데이터베이스에 대해 sqlplus를 통해 적절한 쿼리를 실행하므로 sqlplus로 바로 보낼 수있는 솔루션을 선호합니다.

내 데이터베이스에서 이것을 삭제하는 SQL은 다음과 같습니다.

alter table MYTABLE drop constraint SYS_C0044566

all_constraints뷰를 쿼리 할 때 제약 조건을 볼 수 있습니다.

select * from all_constraints where table_name = 'MYTABLE'

그러나 SEARCH_CONDITIONLONG데이터 유형 으로 작업하는 방법 이나 이름을 알고도 조회 제약 조건을 동적으로 삭제하는 방법을 잘 모르겠습니다.

그렇다면 이름이 아니라 무엇인지에 따라이 제약 조건을 삭제할 수있는 변경 스크립트를 어떻게 만들 수 있습니까?


편집 : @Allan의 대답은 좋은 대답이지만 시스템 생성 이름이있을 수있는 제약 조건이 제거 방법과 관련이 있다는 것이 보편적으로 사실이 아닐 수 있다는 것이 (오라클 전문 지식이 부족하여) 우려됩니다. 이름을 몰라도 제약. 해당 제약 조건을 논리적으로 삭제할 때 시스템 이름 제약 조건의 이름을 알지 않아도되는 방법이 항상 있다는 것이 사실입니까?


alter table MYTABLE modify (MYCOLUMN null);

Oracle에서는 열에 대해 null이 지정되지 않은 경우 null이 아닌 제약 조건이 자동으로 생성됩니다. 마찬가지로 널을 허용하도록 열이 변경되면 자동으로 삭제됩니다.

수정 된 질문 설명 :이 솔루션은 "not null"열에 대해 생성 된 제약 조건에만 적용됩니다. 이름을 지정하지 않고 열 정의에서 "Primary Key"또는 check 제약 조건을 지정하면 제약 조건 (및 기본 키의 인덱스)에 대한 시스템 생성 이름으로 끝납니다. 이 경우 삭제하려면 이름을 알아야합니다. 가장 좋은 방법은 "not null"이외의 모든 제약 조건에 대해 이름을 지정하여 시나리오를 피하는 것입니다. 일반적으로 이러한 제약 조건 중 하나를 삭제해야하는 상황에 처한 경우 PL / SQL 및 데이터 정의 테이블에 의존해야 할 것입니다.


시험:

alter table <your table> modify <column name> null;

nullable로 만들려는 필드가 기본 키의 일부인 경우에는 할 수 없습니다. 기본 키는 null 필드를 가질 수 없습니다.


사용 된 제약 조건을 찾으려면 아래 코드를 사용하십시오.

-- Set the long data type for display purposes to 500000.

SET LONG 500000

-- Define a session scope variable.

VARIABLE output CLOB

-- Query the table definition through the <code>DBMS_METADATA</code> package.

SELECT dbms_metadata.get_ddl('TABLE','[Table Described]') INTO :output FROM dual;

이것은 본질적으로 참조 된 테이블이 만들어지는 방법에 대한 create 문을 보여줍니다. 테이블 생성 방법을 알면 모든 테이블 제약 조건을 볼 수 있습니다.

Michael McLaughlin의 블로그에서 발췌 한 답변 : http://michaelmclaughlin.info/db1/lesson-5-querying-data/lab-5-querying-data/ 그의 Database Design I 수업에서.


다른 값을 허용하기 위해 업데이트해야하는 사용자 지정 검사 제약 조건을 우회하려는 동일한 문제에 직면했습니다. 문제는 ALL_CONSTRAINTS가 제약 조건이 적용되는 열을 알려주는 방법이 없다는 것입니다. 내가 할 수 있었던 방법은 대신 ALL_CONS_COLUMNS를 쿼리 한 다음 각 제약 조건을 이름으로 삭제하고 다시 만드는 것입니다.

table_name = [TABLE_NAME] 및 column_name = [COLUMN_NAME] 인 all_cons_columns에서 constraint_name을 선택하십시오.

참고 URL : https://stackoverflow.com/questions/2540615/how-can-i-drop-a-not-null-constraint-in-oracle-when-i-dont-know-the-name-of-t

반응형