programing

Oracle에서 숫자 열의 정밀도 또는 축척 향상

padding 2023. 11. 4. 10:18
반응형

Oracle에서 숫자 열의 정밀도 또는 축척 향상

이름이 붙은 테이블이 있습니다.AAA열 포함:

ED_RATE NOT NULL NUMBER(26,6) 

다음 문장을 사용하여 길이를 늘리고자 합니다.

ALTER TABLE ioa_invoice_line MODIFY FIXED_RATE NUMBER(26,15) 

이 작업을 실행하면 오류가 발생합니다. 이 문제를 해결하는 방법을 알려주십시오.

ORA-01440: 정밀도나 축척을 줄이기 위해서는 수정할 열이 비어 있어야 함

  1. 00000 - 정밀도나 축척을 줄이려면 수정할 열이 비어 있어야 함

Oracle(Reference)에서는 수치 열의 정밀도를 줄일 수 없습니다.당신의 질문에서 흥미로운 점은 예전의 정확성입니다.NUMBER(26,6)그리고 새로운 원하는 정밀도는NUMBER(26,15). 이렇게 하면 두 열 모두 정밀도의 총 26자리가 동일한 것으로 보입니다.이것이 당신의 혼란의 원인이 될 것이라 생각합니다.그러나 첫 번째 경우는 소수점 정밀도가 6자리이고 두 번째 경우는 15자리입니다.열에 추가되는 9자리의 정밀도는 소수점 왼쪽의 정밀도 비용으로 나올 것입니다.따라서 일부 데이터가 잘릴 수 있습니다.

십진 정밀도 9자리를 추가하려면 전체 정밀도도 더 높여야 할 것 같습니다.따라서 다음이 작동해야 합니다.

ALTER TABLE ioa_invoice_line MODIFY FIXED_RATE NUMBER(35,15)
                                                      ^^ ^^ add 9 to both

정밀도는 38로 제한되며, 필요한 범위 내에 있습니다.

NUMBER(26,6)은 26자리를 의미하며, 그 중 소수점 6자리, 정수 부분은 20자리를 남깁니다.NUMBER(26,15)는 - 음, 알 수 있습니다.그러면 적분 부분이 11자리밖에 남지 않으므로 기존 데이터와 충돌할 가능성이 있습니다.

NUMBER(35,15)를 원할 것입니다.

이름을 바꾼 다음 새 열을 만들고 모든 값을 복사한 다음 이전 열을 제거할 수 있습니다.

alter table ioa_invoice_line rename column ED_RATE to ED_RATE_TMP;
alter table ioa_invoice_line add ED_RATE NOT NULL NUMBER(26,15);
update ioa_invoice_line set ED_RATE=ED_RATE_TMP;
alter table ioa_invoice_line drop column ED_RATE_TMP;
execute utl_recomp.recomp_serial();

다른 방법은 임시 열로 값을 이동한 다음 ED_RATE의 길이를 늘리고 값을 다시 이동하는 것입니다.

alter table ioa_invoice_line add ED_RATE_TMP NUMBER(26,6);
alter table ioa_invoice_line modify column ED_RATE null;
update ioa_invoice_line set ED_RATE_TMP=ED_RATE, ED_RATE=null;
alter table ioa_invoice_line modify column ED_RATE NUMBER(26,15);
update ioa_invoice_line set ED_RATE=ED_RATE_TMP;
alter table ioa_invoice_line modify column ED_RATE not null;
alter table ioa_invoice_line drop column ED_RATE_TMP;
execute utl_recomp.recomp_serial();

소스 테이블에서 구조를 사용하지만 ED_DATE 열을 사용하여 새 테이블을 생성해야 합니다.그런 다음 소스 테이블의 모든 데이터를 새 테이블로 복사하고 소스 테이블을 드롭한 다음 대상 테이블의 이름을 소스 테이블로 변경합니다.

언급URL : https://stackoverflow.com/questions/39586115/increasing-precision-or-scale-of-number-column-in-oracle

반응형