ORA-12899: 열에 대한 값이 너무 큽니다.
저는 ERP 시스템에서 피드의 형태로 데이터를 얻고 있습니다. 특히 피드의 한 열 길이는 15개입니다.
열 는 대상테이에서도해당열에길이다같습다니음과는블▁also▁is입니다.varchar2(15)하지만 동일한 내용을 비트에 로드하려고 하면 다음과 같은 오류가 표시됩니다.
ORA-12899: emp_name 열에 대한 값이 너무 큽니다(실제: 16, 최대값: 15).
생산 시 기본 테이블이기 때문에 열 길이를 늘릴 수 없습니다.
이 블로그를 살펴보십시오. 열 데이터 유형을 varchar(100)에서 varchar(100)로 변경하면 문제가 해결됩니다.제 경우에는 데이터에 움라우트 문자가 포함되어 있습니다.
http://gerardnico.com/wiki/database/oracle/byte_or_character
이와 같은 문제의 일반적인 이유는 ASC가 아니기 때문입니다.원래 데이터베이스에서는 1바이트로 표시할 수 있지만 대상 데이터베이스에서는 (다른 NLS 설정으로 인해) 2바이트 이상이 필요한 II 문자.
대상 열이 15자로 충분히 커지도록 수정할 수 있습니다.
ALTER TABLE table_name MODIFY column_name VARCHAR2(15 CHAR)
:15 CHAR사용할 수도 있습니다.BYTE둘 다 없는 경우 데이터베이스는 NLS_Length_SEMANTICS 설정을 기본값으로 사용합니다.
15바이트보다 큰 값을 확인하려면 다음을 수행합니다.
- 가 " " " 로 합니다.
15 CHAR - 소스 테이블의 데이터를 준비 테이블에 삽입
문제가 되는 행을 찾아내다
스테이징에서 길이 b(mycol) > 15를 선택합니다.
((으)를 합니다.)LENGTHB와 LENGTH전자는 길이를 바이트로 반환하고 후자는 길이를 문자로 반환합니다.)
AL32를 찾았습니다UTF8만 유효한 설정입니다.이는 표준 UTF8과 달리 일부 문자에는 보조 바이트가 있습니다. 즉, 문자는 약 99% 동일합니다.문자 변환 문제가 진행 중인 것 같습니다.즉, 표 1의 데이터는 하나의 문자 집합을 사용하여 작성되었으며, 새 표에는 약간 다른 문자 집합이 있습니다.
이것이 사실이라면, 당신은 홀수볼 문자 집합의 출처를 찾아야 합니다.왜냐하면 앞으로도 이런 일이 계속 일어날 것이기 때문입니다.
해결 방법:
ORA-12899: 열에 대한 값이 너무 큼(실제, 최대값)
이미 아래의 새 길이보다 많은 데이터가 있는 테이블의 열 크기를 업데이트하는 동안 문제가 발생할 경우에는 반드시 작동하는 간단한 스크립트입니다.
ALTER TABLE TABLE_NAME ADD (NEW_COLUMN_NAME DATATYPE(DATASIZE));
UPDATE TABLE_NAME SET NEW_COLUMN_NAME = SUBSTR(OLD_COLUMN_NAME , 1, NEW_LENGTH);
ALTER TABLE TABLE_NAME DROP COLUMN OLD_COLUMN_NAME ;
ALTER TABLE TABLE_NAME RENAME COLUMN NEW_COLUMN_NAME TO OLD_COLUMN_NAME;
쿼리의 의미:
ALTER TABLE TABLE_NAME ADD (NEW_COLUMN_NAME DATATYPE(DATASIZE));
기존 테이블에 필요한 새 길이의 새 열만 생성됩니다.
UPDATE TABLE_NAME SET NEW_COLUMN_NAME = SUBSTR(OLD_COLUMN_NAME , 1, NEW_LENGTH);
이전 열 값에서 새 길이 값 뒤의 모든 값을 삭제하고 잘라낸 값을 새 열 이름으로 설정합니다.
ALTER TABLE TABLE_NAME DROP COLUMN OLD_COLUMN_NAME ;
이전 열 이름은 이제 황당한 이름으로 제거되며 모든 정보를 새 열에 복사했습니다.
ALTER TABLE TABLE_NAME RENAME COLUMN NEW_COLUMN_NAME TO OLD_COLUMN_NAME;
새 열 이름을 이전 열 이름으로 변경하면 원하는 대로 새 열 크기를 제외하고 원래 테이블 구조를 복원하는 데 도움이 됩니다.
확실히 오류의 원인은 열 데이터 유형에 비해 값이 너무 크기 때문입니다.하지만, 때때로 그것은 첫눈에 보이지 않습니다.다른 답변에 언급된 "바이트 대 문자" 차이를 제외하고는 라인 터미네이터에도 문제가 있을 수 있습니다.
도커화된 오라클에서 SQL*Loader를 사용하여 CSV 파일을 로드하려고 했습니다.foo활자열char(1)마지막 열이었습니다.받았습니다ORA-12899: value too large for column foo (actual: 2, maximum: 1)모든 값에도 불구하고 오류fooCSV 파일이 Windows 편집기에서 편집되어 실수로 CRLF 터미네이터로 저장되었음을 나중에 알게 되었습니다.도커 컨테이너의 Linux는 LF만 필요하므로 CR은 열 데이터의 일부로 처리되었습니다.
이 오류는 저를 조금 혼란스럽게 만들었습니다.
VARCHAR2(xCHAR)는 열에 x자를 포함하지만 4000바이트 이하의 문자를 포함할 수 있음을 의미합니다.내부적으로 Oracle은 열의 바이트 길이(DBA_TAB_COLUMN)를 설정합니다.DATA_LENGTH)에서 MIN(x * mchw, 4000)까지 입력합니다. 여기서 mchw는 데이터베이스 문자 집합에 있는 문자의 최대 바이트 폭입니다.이 값은 US7ASCII 또는 WE8MSWIN1252의 경우 1, JA16SJIS의 경우 2, UTF8의 경우 3, AL32UTF8의 경우 4입니다.
예를 들어 AL32의 VARCHAR2(3000 CHAR) 열UTF8 데이터베이스는 내부적으로 4000바이트의 너비를 갖는 것으로 정의됩니다.ASCII 범위(문자 제한)에서 최대 3000자까지 사용할 수 있지만 1333자의 한자(바이트 제한, 1333 * 3바이트 = 3999바이트)만 사용할 수 있습니다.AL32의 VARCHAR2(100CHAR) 열UTF8 데이터베이스는 내부적으로 400바이트의 너비를 갖는 것으로 정의됩니다.최대 100개의 유니코드 문자를 사용할 수 있습니다.
참조: https://community.oracle.com/tech/developers/discussion/421117/difference-between-varchar2-4000-byte-varchar2-4000-char
언급URL : https://stackoverflow.com/questions/27576972/ora-12899-value-too-large-for-column
'programing' 카테고리의 다른 글
| 인터넷 뱅킹과 같은 보안 애플리케이션에서 AJAX를 많이 볼 수 없는 이유는 무엇입니까? (0) | 2023.08.15 |
|---|---|
| 모든 플랫폼에서 공유 싱글톤 구성 요소를 만드는 방법은 무엇입니까? (0) | 2023.08.15 |
| 반응에서 하위 구성 요소로부터 값을 가져오는 방법 (0) | 2023.08.15 |
| backbone.js - 요청과 함께 추가 데이터 가져오기 (0) | 2023.08.15 |
| 파일 이름 Powershell의 일부 바꾸기 (0) | 2023.08.15 |