Oracle

[ORACLE] NUMBER(,)타입 사이즈 줄이기 오류 ORA-01440 해결 방법

LKJaden 2025. 4. 14. 13:20

ORA-01440: column to be modified must be empty to decrease precision or scale

기존에 정의된 데이터 타입 사이즈보다 작은 크기의 사이즈로 ALTER MODIFY(변경)하려고 할 때 발생한다.

원래부터 작은 크기의 사이즈로의 수정은 불가하다. (데이터가 모두 NULL인 경우에는 가능할 것으로 예상됨)

 

 

원인

 

아래와 같이 기존에 NUMBER(17,5)로 즉, 총 17자리이되 정수 12자리 소수 5자리로 구성된 NUMBER 타입의 변수를

 

NUMBER(15,5)로 총 자리 수를 줄일 때 에러가 발생한 것을 볼 수 있다.

 

 

 

 

해결 방법

1.  수정하려던 사이즈로 새 컬럼을 추가(add)

2. temp 컬럼에 기존의 값 넣기(update)

3. 기존 컬럼 삭제(drop)

4, temp 컬럼명 수정(rename)

-- 1. 수정하려던 사이즈인 NUMBER(15,5)로 DIS_RATE_TEMP 컬럼을 추가
ALTER TABLE TB_INVOICE_UNIT ADD DIS_RATE_TEMP NUMBER(15,5); 

-- 2. DIS_RATE_TEMP 컬럼에 기존의 DIS_RATE 컬럼 값을 넣기
UPDATE TB_INVOICE_UNIT SET DIS_RATE_TEMP = DIS_RATE;

-- 3. 기존 컬럼 DIS_RATE 삭제
ALTER TABLE TB_INVOICE_UNIT DROP COLUMN DIS_RATE;

-- 4. DIS_RATE_TEMP 컬럼명을 기존 컬럼명인 DIS_RATE로 수정
ALTER TABLE TB_INVOICE_UNIT RENAME COLUMN DIS_RATE_TEMP TO DIS_RATE;

 

 

 

테이블 정보에서 컬럼의 순서가 바뀌긴 하지만, 해당 방법이 가장 쉽게 해결할 수 있는 방법인 것 같아 사용하였다.

다른 방법으로는 새로운 TEMP 테이블을 만들고, 기존 테이블의 데이터를 INSERT문 형식으로 EXPORT하여 스크립트를 실행할 수 있을 것으로 보인다.