2009-11-25 2 views
1

Oracle 데이터베이스에 데이터를로드하고 삽입하는 중입니다. 중국어 문자처럼 보이는 특수 문자가 발생하면 열의 최대 크기를 초과하여 행 거부와 같은 오류가 발생합니다. 동일한 열에 대해 동일한 길이로 나타나는 영어 문자가있는 행에 대해이 오류가 발생하지 않습니다. SUBSTR 및 TRIM 기능을 사용하고 있지만 작동하지 않습니다. 중국어로 된 문자열의 길이가 열 크기를 초과하는지 어떻게 판단 할 수 있습니까?특수 문자가있는 Oracle SQL로드 테이블 열

+0

NSLANG를 구성 했습니까? – JuanZe

답변

3

당신이 XX 바이트보다 더 긴 문자열을 삽입하려고하면 VARCHAR2(XX)가 [예 VARCHAR2(20)을 위해, 당신이 오류가 발생합니다로 열이 정의 된 경우.

기능 SUBSTR문자하지 바이트의 수의 길이를 계산합니다. 하위 문자열을 바이트 단위로 선택하려면 SUBSTRB 함수를 사용하십시오.

SQL> select substr('ЙЖ', 1, 2) from dual; 

SUBSTR('ЙЖ',1,2) 
------------------ 
ЙЖ 

SQL> select substrb('ЙЖ', 1, 2) from dual; 

SUBSTRB('ЙЖ',1,2) 
------------------- 
Й 

편집 : Adam에 의해 제안 당신이 VARCHAR2 (XX CHAR)로 열과 변수를 정의하면, 당신은 문자를 arithmetics를 사용할 수 있습니다. 이 경우 열은 모든 문자 세트 (테이블에 저장하는 경우 최대 4000 바이트까지)에 XX 문자를 저장할 수 있습니다.

+1

스키마 정의를'VARCHAR2 (XX)'에서'VARCHAR2 (XX CHAR)'로 변경하여 컬럼 길이가 바이트가 아닌 문자로되도록 제안 할 수 있습니다. –

+0

감사합니다 아담, 내가 VBA2 (XX CHAR)를 사용하여 열 스키마 정의를 변경 한 후 내 대답 –

+0

을 업데이트했습니다. 행 거부의 문제가 제거되었지만이 값을 스테이지에서 메인 테이블로로드해야합니다. 스키마 정의, 그래서, 컬럼 크기 이상이되지 않도록 제한 할 substr 않았다,하지만 지금 나는 SELECT * FROM TABLE, ORA-29275 : 부분 멀티 바이트 문자를 수행하는 동안 새 오류가 나타납니다. – Walker

관련 문제