에러 내용

ORA-12899: value too large for column

"스키마"."테이블명"."컬럼" (actual: m, maximun: n)

 

→ 해당 테이블 컬럼값의 타입 길이보다 실제 입력된 값이 커서 발생하는 에러이다.

 

해결 방법

해당 테이블의 컬럼의 타입과 길이를 확인하고, 문제가 발생하는 데이터를 찾는다.

이때 문자열 길이 함수를 사용한다.

 

에러 처리 방법은 아래 두가지 방법 중 하나를 선택한다.

1. 해당 문제가 되는 데이터를 찾아 값을(길이) 수정한다.

2. 해당 테이블의 컬럼 길이를 수정한다. ( 예 : VARCHAR2(30) → VARCHAR2(40) )

 


글자 수 구하기 LENGTH()

SELECT * FROM EMP

WHERE LENGTH(ENAME) = 5;

 

바이트 수 구하기 LENGTHB()

SELECT * FROM EMP

WHERE LENGTHB(ENAME) = 5;

 

LENGTH 함수는 입력된 문자열의 글자 수를 반환하고 LENGTHB 함수는 바이트 수로 반환한다. LENGTHB 함수는 시스템 문자셋 설정에 따라서 한글을 2byte 또는 3byte로 계산하므로 주의해야 한다.

 

시스템 문자셋을 확인하는 방법 (몇 byte로 계산되는지), CONVERT()

한글 문자셋

- KO16KSC5601(2byte)

- KO16MSWIN949(2byte)

- UTF8(3byte)

- AL32UTF8(3byte)

 

SELECT * 
 FROM nls_database_parameters 
WHERE parameter LIKE 'NLS_CHARACTERSET'

 

[결과]

PRAMETER VALUE
NLS_CHARACTERSET AL32UTF8

 

한글을 2byte로 인식하게 하기 (3byte → 2byte)

SELECT LENGTHB(CONVERT('오라클', 'KO16MSWIN949')) AS LENGTHB
 FROM dual;

 

[결과]

LENGTHB
6

 

 

+ Recent posts