2011-12-19 11 views
2

일부 필드에 후행 공백이있는 데이터를로드하는 데 sqlldr을 사용하고 있습니다. sqlldr에게 이러한 공백을 무시하도록 지시하는 방법이 있습니까?sqlldr에게 후행 및 선행 공백을 트림하도록하는 방법

field "trim(:field)" 

?

+1

실제로 기본적으로 선택적 PRESERVE BLANKS가 없으면 앞뒤 공백이 무시됩니다. 내 질문은 내가'PRESERVE BLANKS'를 기본적으로 추가하는 ctl 파일을 생성하는 sqlldr 위에 도구를 사용하고 있다는 사실에서 비롯되었습니다. –

+0

선행 및 후행 공백은 기본적으로 특정 데이터 형식에 대해서만 무시됩니다. 그러나 VARCHAR와 같은 일부 유형은 공백을 그대로 유지합니다. 아래의 링크를 참조하십시오 http://www.csee.umbc.edu/portal/help/oracle8/server.815/a67792/ch05.htm#5817 –

답변

0

오래된 스레드라는 것을 알고 있지만 어쨌든 나는 소리칩니다.

많은 것들과 마찬가지로 대답은 "다릅니다."입니다. 데이터가 고정 형식인지 분리 된 데이터인지에 따라 다릅니다. 구분 된 경우 제어 파일이 OPTIONALLY ENCLOSED BY 절을 사용하는지 여부에 따라 달라집니다. 모든 유별난 세부 사항은 Oracle SQL * Loader 문서를 참조하십시오. 예를 들어,이 링크를 시도하십시오 : http://docs.oracle.com/cd/B28359_01/server.111/b28319/ldr_field_list.htm#i1007768

2

필드 "trim (: field)"대부분의 경우에는 잘 작동하지만 열 크기가 char (1)이지만 제어 파일의 데이터는 'Y'와 'trim (: field)'의 데이터로드에 실패했습니다. 많은 연구 끝에 trim() 함수가 데이터에서 공백을 삭제하지만 동시에 공백 대신 데이터에 null을 추가하므로 위의 예에서 데이터 길이가 2가 될 것이므로 데이터의 왼쪽에있는 값. 따라서 데이터는 nullY와 같은 것이 될 것입니다. 테이블의 열 크기가 실제 크기보다 작고로드되지 않고 오라클이 오류 메시지를 throw하기 때문입니다. "trim (null from trim (: field))"

위의 스크립트는 먼저 공백을 잘라내어 sql-loader에 의해 추가 된 null을 다시 트림합니다.

내가 제공 한 정보가 내가 한 것처럼 문제에 직면 한 사람에게 도움이되기를 바랍니다. 나는 이런 종류의 문제에 답하는 어떤 스레드도 찾지 못했기 때문에 이것을 게시하는 것에 저항 할 수 없었다.

+0

그래, 이건 많이 도와 줘서 고마워! – Reimius

+0

궁금 해서요. 듀얼 (트림 ('음식')에서 선택 트림을 수행하여 테스트하면 작동하지 않는 것처럼 보입니다.)에서 듀얼. 그것은 sqlloader에서 다르게 작동합니까? – Reimius