source

Oracle 열에서 기본값을 제거하려면 어떻게 해야 합니까?

nicesource 2023. 2. 28. 23:36
반응형

Oracle 열에서 기본값을 제거하려면 어떻게 해야 합니까?

테이블의 컬럼 기본값은 sysdate로 되어 있는데 기본값을 얻지 않도록 변경하고 싶은데 어떻게 해야 하나요?

ALTER TABLE YourTable MODIFY YourColumn DEFAULT NULL;

조의 답변은 다음과 같은 의미에서 옳다.DEFAULT NULL기능은 처음부터 해당 컬럼의 기본값을 정의하지 않은 것과 동일합니다.컬럼에 기본값이 없는 경우 해당 컬럼의 값을 지정하지 않고 새 행을 삽입하면 다음과 같습니다.NULL.

그러나 Oracle은 시스템 뷰에서 알 수 있듯이 내부적으로 두 가지 사례를 명확하게 나타냅니다.(이는 Oracle 10.x, 11.x 및 12.x에도 적용되며 이전 버전에도 적용될 수 있습니다.)

  1. 열이 생성된 경우 또는ALTERed, 포함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
            …
       )
    
  2. 기본값이 지정되지 않았습니다.

    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

반응형