programing

데이터를 포함하는 동안 열 유형을 숫자에서 varchar2로 변경하는 Oracle SQL

kingscode 2023. 7. 20. 22:47
반응형

데이터를 포함하는 동안 열 유형을 숫자에서 varchar2로 변경하는 Oracle SQL

Oracle 11g에 데이터가 포함된 테이블이 있는데 Oracle SQL Plus를 사용하여 다음 작업을 수행해야 합니다.

대상: 열 유형 변경TEST1테이블에UDA1부터number로.varchar2.

제안된 방법:

  1. 백업 테이블
  2. 열을 null로 설정합니다.
  3. 데이터 유형 변경
  4. 가치를 회복합니다.

다음은 작동하지 않았습니다.

create table temp_uda1 AS (select * from UDA1); 

update UDA1 set TEST1 = null;
commit;

alter table UDA1 modify TEST1 varchar2(3);

insert into UDA1(TEST1)
  select cast(TEST1 as varchar2(3)) from temp_uda1;
commit;

(질서 유지를 위해) 인덱스와 관련이 있는 거죠?

create table temp_uda1 (test1 integer);
insert into temp_uda1 values (1);

alter table temp_uda1 add (test1_new varchar2(3));

update temp_uda1 
   set test1_new = to_char(test1);

alter table temp_uda1 drop column test1 cascade constraints;
alter table temp_uda1 rename column test1_new to test1;

열에 인덱스가 있으면 다시 만들어야 합니다.

이전 열에 999보다 큰 숫자가 있으면 업데이트가 실패합니다.만약 그렇다면, 당신은 다음의 최대값을 조정할 필요가 있습니다.varchar기둥.

새 열을 varchar2로 추가하고, 이 열에 데이터를 복사하고, 이전 열을 삭제하고, 새 열 이름을 실제 열 이름으로 변경합니다.

ALTER TABLE UDA1
ADD (TEST1_temp  VARCHAR2(16));

update UDA1 set TEST1_temp = TEST1;

ALTER TABLE UDA1 DROP COLUMN TEST1;

ALTER TABLE UDA1 
RENAME COLUMN TEST1_temp TO TEST1;

Oracle 패키지 보기DBMS_REDEFINE운이 좋으면 필요한 경우 다운타임 없이 온라인으로 작업을 수행할 수 있습니다.그렇지 않으면 다음을 수행할 수 있습니다.

  • 새로 추가VARCHAR2기둥.
  • 사용하다update베끼기 위해NUMBER안으로VARCHAR2
  • 떨어지다NUMBER기둥.
  • 이름 바꾸기VARCHAR2기둥.

여기 있습니다. 이 솔루션은 기존의 NOT NULL 또는 기본 키 제약 조건에 영향을 주지 않았습니다.Primary 키의 유형을 Number에서 VARCHAR2(3)로 변경합니다. 여기 예제 표 직원의 단계가 있습니다.

  1. 테이블 및 인덱스 백업, 제약 조건 생성 테이블 employee_bkpcreate table employee_bkp as select * from employee commit;
  2. 표를 잘라내어 비웁니다.truncate table employee
  3. 테이블을 변경하여 유형 변경ALTER TABLE employee MODIFY employee_id varchar2(30);
  4. 백업 테이블에서 데이터 다시 복사insert into employee (select * from employee_bkp) commit;
  5. 확인

언급URL : https://stackoverflow.com/questions/18978246/oracle-sql-to-change-column-type-from-number-to-varchar2-while-it-contains-data

반응형