Oracle에서 숫자 열의 정밀도 또는 축척 향상
이름이 붙은 테이블이 있습니다.AAA
열 포함:
ED_RATE NOT NULL NUMBER(26,6)
다음 문장을 사용하여 길이를 늘리고자 합니다.
ALTER TABLE ioa_invoice_line MODIFY FIXED_RATE NUMBER(26,15)
이 작업을 실행하면 오류가 발생합니다. 이 문제를 해결하는 방법을 알려주십시오.
ORA-01440: 정밀도나 축척을 줄이기 위해서는 수정할 열이 비어 있어야 함
- 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
'programing' 카테고리의 다른 글
Embarcadero FireDAC로 AWS RDS에서 호스팅되는 MariaDB에서 SSL을 설정하는 방법 (0) | 2023.11.04 |
---|---|
CREATE TABLE의 1064 오류...TYPE=MYISAM (0) | 2023.11.04 |
ASP에서 서버의 IP 주소를 가져오는 중입니다.NET? (0) | 2023.11.04 |
AngularJS: $scope 변수를 함수에 전달하는 시기 (0) | 2023.11.04 |
Node.js에서 새 줄에 추가하는 방법 (0) | 2023.11.04 |