programing

11g의 select 문에서 새로 생성된 테이블 열에 대한 기본값을 설정하는 방법

oldcodes 2023. 7. 8. 11:10
반응형

11g의 select 문에서 새로 생성된 테이블 열에 대한 기본값을 설정하는 방법

Oracle 11g에서 열 중 하나에 대한 기본값으로 테이블을 만듭니다.구문:

create table xyz(emp number,ename varchar2(100),salary number default 0);

성공적으로 작성되었습니다.몇 가지 이유로 이전 테이블 구조와 데이터가 동일한 다른 테이블을 만들어야 합니다.그래서 이름으로 새 테이블을 만들었습니다.abc~하듯이

create table abc as select * from xyz. 

여기서 "abc"는 이전 테이블과 동일한 구조와 데이터로 성공적으로 생성되었습니다.xyz그러나 이전 테이블 "xyz"의 "salary" 열에 대해 기본값이 "0"으로 설정되었습니다.그러나 새로 만든 테이블 "abc"에서는 기본값이 설정되지 않습니다.

이것은 모두 Oracle 11g에 있습니다.기본값이 설정되지 않은 이유와 select 문을 사용하여 설정할 수 있는 방법을 알려주시기 바랍니다.

CREATE TABLE AS SELECT에서 제약 조건과 기본값을 지정할 수 있지만 구문은 다음과 같습니다.

create table t1 (id number default 1 not null);
insert into t1 (id) values (2);

create table t2 (id default 1 not null)
as select * from t1;

즉, 원본 테이블/선택에서 제약 조건을 상속하지 않습니다.데이터 유형(길이/정밀/스케일)만 선택에 의해 결정됩니다.

그 이유는 CTAS(Create table as select)가 소스에서 대상 테이블로 메타데이터를 복사하지 않기 때문입니다.

  • 기본 키 없음
  • 외제 키 없음
  • 보조금 없음
  • 인덱스 없음
  • ...

당신이 원하는 것을 이루기 위해서라면, 나는

  • dbms_metadata.get_ddl을 사용하여 전체 테이블 구조를 가져오고 테이블 이름을 새 이름으로 바꾸고 이 문을 실행한 다음 INSERT를 수행하여 데이터를 복사합니다.
  • 또는 CTAS를 계속 사용하여 user_constraints에서 원본 테이블에 대한 null이 아닌 제약 조건을 추출한 다음 나중에 대상 테이블에 추가합니다.

필요할 것입니다.alter table abc modify (salary default 0);

새 테이블은 "null이 아닌" 제약 조건만 상속하고 다른 제약 조건은 상속하지 않습니다.따라서 "create table as" 명령을 사용하여 테이블을 만든 후 테이블을 변경하거나 다음과 같이 수행하여 필요한 모든 제약 조건을 정의할 수 있습니다.

create table t1 (id number default 1 not null);
insert into t1 (id) values (2);

create table t2 as select * from t1;

이렇게 하면 null 제약 조건이 없는 테이블 t2가 생성됩니다.그러나 "not null"을 제외한 다른 제약 조건의 경우 다음 구문을 사용해야 합니다.

create table t1 (id number default 1 unique);
insert into t1 (id) values (2);

create table t2 (id default 1 unique)
as select * from t1;

언급URL : https://stackoverflow.com/questions/5934083/how-to-set-default-value-for-column-of-new-created-table-from-select-statement-i

반응형