Oracle 열에서 기본값을 제거하려면 어떻게 해야 합니까?
테이블의 컬럼 기본값은 sysdate로 되어 있는데 기본값을 얻지 않도록 변경하고 싶은데 어떻게 해야 하나요?
ALTER TABLE YourTable MODIFY YourColumn DEFAULT NULL;
조의 답변은 다음과 같은 의미에서 옳다.DEFAULT NULL
이 기능은 처음부터 해당 컬럼의 기본값을 정의하지 않은 것과 동일합니다.컬럼에 기본값이 없는 경우 해당 컬럼의 값을 지정하지 않고 새 행을 삽입하면 다음과 같습니다.NULL
.
그러나 Oracle은 시스템 뷰에서 알 수 있듯이 내부적으로 두 가지 사례를 명확하게 나타냅니다.(이는 Oracle 10.x, 11.x 및 12.x에도 적용되며 이전 버전에도 적용될 수 있습니다.)
열이 생성된 경우 또는
ALTER
ed, 포함DEFAULT NULL
:create table foo (bar varchar2(3) default null); select default_length, data_default from all_tab_columns where table_name='FOO'; => default_length data_default -------------- ------------ 4 NULL select dbms_metadata.get_ddl('TABLE','FOO') from dual; => CREATE TABLE "FOO" ( "BAR" VARCHAR(3) DEFAULT NULL … )
기본값이 지정되지 않았습니다.
create table foo (bar varchar2(3)); select default_length, data_default from all_tab_columns where table_name='FOO'; => default_length data_default -------------- ------------ (null) (null) select dbms_metadata.get_ddl('TABLE','FOO') from dual; => CREATE TABLE "FOO" ( "BAR" VARCHAR(3) … )
위와 같이 Oracle의 출력에 차이가 생기는 중요한 사례가 있습니다.이를 사용하여 테이블 정의를 추출할 경우입니다.
사용하시는 경우GET_DDL()
데이터베이스를 자세히 살펴보면 기능적으로 동일한 테이블에 대해 약간 다른 DDL 출력을 얻을 수 있습니다.
이거 쓸 때 정말 짜증나네GET_DDL()
데이터베이스의 여러 인스턴스 간에 버전 제어 및 비교를 위해 수동으로 출력을 변경하는 것 외에 이를 회피할 방법이 없습니다.GET_DDL()
또는 테이블을 기본값 없이 완전히 다시 만듭니다.
원하는 작업을 수행하는 유일한 방법은 표를 다시 작성하는 것입니다.
Toad에서는 테이블을 마우스 오른쪽 버튼으로 클릭하고 "테이블 재구성"을 선택합니다.Toad에서 테이블 이름을 변경하고 새 테이블을 다시 생성하는 스크립트를 만듭니다.이 스크립트는 인덱스, 제약 조건, 외부 키, 주석 등을 재생성합니다.테이블을 데이터로 채웁니다.
해당 열 뒤에 있는 "기본 null"을 제거하도록 스크립트를 수정하십시오.
이전 버전의 Oracle에서 이 방법이 효과가 있을지는 모르겠지만, 동료는 다음과 같은 기능을 통해 처음의 상태(예: 설정되지 않은 상태)로 올바르게 재설정할 수 있다는 것을 알게 되었습니다.
ALTER TABLE YourTable MODIFY YourColumn DEFAULT (null);
메모: 코멘트에서 tejoe가 지적한 바와 같이 get_ddl을 사용하여 표를 비교해도 문제가 해결되지 않습니다.그러나 적어도 all_tab_columns에서 data_default를 선택하면 NULL이 아닌 null이 반환됩니다.
언급URL : https://stackoverflow.com/questions/8481532/how-do-i-remove-the-default-value-from-a-column-in-oracle
'source' 카테고리의 다른 글
이 응용 프로그램에는 /error에 대한 명시적 매핑이 없습니다. (0) | 2023.02.28 |
---|---|
Tomcat 컨테이너에 여러 웹 애플리케이션을 포함하는 Spring Boot 액추에이터는 javax.management를 슬로우합니다.인스턴스 이미Exception 예외 (0) | 2023.02.28 |
WooCommerce - 여러 지불 방법을 동시에 사용한 지불 주문 (0) | 2023.02.28 |
필요한 요청 본문 내용이 없습니다. org.springframework.web.method.HandlerMethod$HandlerMethod 파라미터 (0) | 2023.02.28 |
Ubuntu에 루비 2.2.3이 있는 json gem을 설치할 수 없습니다. (0) | 2023.02.28 |